练习 - 将应用程序连接到 Azure 存储帐户

已完成

Azure 存储客户端库提供了一个用于与 Azure 存储帐户进行交互的对象模型。 它用于快速连接到 Azure 存储帐户并使用 Azure 存储服务 API。

Azure 存储客户端库对象模型

Azure 中的存储帐户将整合到一个或多个容器中,这些容器用于存储帐户中的实际 blob 对象(文件)。 这些容器与文件系统中的文件夹类似。 我们可以使用适用于 .NET 的 Azure 存储 Blob 客户端库在存储帐户中创建一个容器,以将照片存储到其中。

若要在程序中使用适用于 .NET 的 Azure 存储 Blob 客户端库,首先需要在程序的顶部添加一个针对 Azure.Storage.Blobs 命名空间的 using 语句。

  1. 将以下命令添加到 Program.cs。

    using Azure.Storage.Blobs;
    

    若要通过 .NET 应用程序中的存储帐户创建和管理容器,则可使用 BlobContainerClient 对象。 若要实例化 BlobContainerClient 客户端对象,则必须提供存储帐户的连接字符串和容器名称。 容器名称的长度必须介于 3 到 63 个字符之间,并且只能包含小写字母和短划线 (-)。 对于此应用程序,只需使用“照片”作为名称。

  2. 接下来,将以下代码添加到应用程序中,以获取 Azure 存储连接字符串并创建 BlobContainerClient 对象。

    var connectionString = configuration.GetConnectionString("StorageAccount");
    string containerName = "photos";
    
    BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
    

    备注

    此时,客户端库尚未尝试连接到 Azure,也不会验证正在使用的连接字符串和访问密钥。 它只是构建了一个用于对 Azure Blob 存储执行操作的轻型客户端对象。 仅当对存储帐户调用某个操作时,网络调用才会执行。

  3. 现在我们可以添加用于创建“照片”容器(用来存储图像)的代码。

    container.CreateIfNotExists();
    
  4. 此时运行应用程序,让它在存储帐户中创建该容器。 由于我们使用了 CreateIfNotExists 方法,因此可以运行程序多次,但该容器只会在首次运行时创建。

    dotnet run
    
  5. 你可以运行以下 Azure CLI 命令来验证该容器是否已创建。 请记住,要将 <name> 替换为你的存储帐户名称。

    az storage container list \
    --account-name <name>
    
  1. 适用于 JavaScript 的 Azure 存储 Blob 客户端库包含许多用于与 Azure 存储 Blob 交互的客户端对象。 此层次结构的顶部是 BlobServiceClient 对象。 若要在 JavaScript 代码中使用此对象,需要向 index.js 文件添加以下语句,该语句要紧随 require('dotenv').config(); 语句之后。

    require('dotenv').config();
    
    const { BlobServiceClient } = require("@azure/storage-blob");
    
  2. 现在,你可以获取存储帐户连接字符串并将其传递到 BlobServiceClient 对象上的工厂方法 fromConnectionString,从而在代码中创建 BlobServiceClient 对象,如下所示。

    const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING;
    const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString);
    

    备注

    在调用需要 Azure 的操作之前,客户端库不会尝试连接到 Azure。 客户端对象是一个轻量级对象,便于访问 Azure Blob 存储;它不验证所使用的连接或访问密钥。

  3. 具有客户端对象后,即可使用客户端对象上的方法来完成实际工作。 进行网络调用的方法是特意设置为异步的。 库使用承诺来返回异步结果。 因此你需要将主函数标记为异步,如下所示。

    async function main() {
     // Function code here
    }
    

    现在我们将对存储帐户执行操作。 存储帐户将整合到一个或多个容器,这些容器的作用类似存储帐户中的文件夹。 在存储帐户中创建的 blob 对象(文件)将存储在其中一个容器中。 你需要在存储帐户中创建一个容器,以用于存储照片。

    容器名称的长度必须介于 3 到 63 个字符之间,并且只能包含小写字母和短划线 (-)。 对于此应用程序,只需使用“照片”作为名称。

    你需要获取一个表示存储帐户中容器的 ContainerClient 对象,以在存储帐户中创建容器。 尽管存储帐户中尚不存在容器,我们也可以使用 ContainerClient 创建容器并可在容器创建后对其进行管理。

  4. 运行以下命令来获取 ContainerClient 对象,在 BlobServiceClient 对象上调用 getContainerClient 方法,并提供容器名称作为参数。 然后对 containerClient 对象使用 createIfNotExists 方法,以在 Azure 存储帐户中创建容器。

    async function main() {
       // Create a container (folder) if it does not exist
      const containerName = 'photos';
      const containerClient = blobServiceClient.getContainerClient(containerName);
      const createContainerResponse = await containerClient.createIfNotExists();
      console.log(`Create container ${containerName} successfully`, createContainerResponse.succeeded);
    }
    
  5. 接下来生成并运行应用,让程序在存储帐户中创建容器。

    node index.js
    

    提示

    如果在使用 await 关键字时遇到错误,请确保已按照前面说明中的最后一步将 async 关键字添加到了 main 函数定义中。

    首次运行该程序时,你应会看到一条消息,该消息显示容器已成功创建。 第二次以及之后运行程序时,你将看到一条显示 false 的消息,因为容器已经存在。

  6. 你可以运行以下 Azure CLI 命令来验证该容器是否已创建。 请记住,要将 <name> 替换为你的存储帐户名称。

    az storage container list \
    --account-name <name>
    

既然程序已连接到 Azure 存储帐户,并且“照片”容器已创建,接下来我们就让程序向该容器上传图像。