练习 - 将应用程序连接到 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. 将以下代码添加到应用程序的 Main 部分,以获取 Azure 存储连接字符串并创建 BlobContainerClient 对象。

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

    注意

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

  3. 在前面几行下面,添加用于创建“照片”容器(用来存储图像)的代码。

    container.CreateIfNotExists();
    
  4. 保存文件。

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

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

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

适用于 JavaScript 的 Azure 存储 Blob 客户端库包含许多用于与 Azure 存储 Blob 交互的客户端对象。 此层次结构的顶部是 BlobServiceClient 对象。 若要在 JavaScript 代码中使用此对象:

  1. 在代码编辑器中打开 index.js 文件,紧接在 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. 在程序中定义客户端对象后,可使用客户端对象上的方法执行实际工作。 进行网络调用的方法是特意设置为异步的。 库使用承诺来返回异步结果。 因此,需要将 main 函数标记为异步。 将 main 函数对象替换为以下代码。 以两个正斜杠开头的行是注释。

    async function main() {
     // Function code here
    }
    
  4. 保存对 index.js 所做的更改。

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

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

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

  5. 若要获取 ContainerClient 对象,请对 BlobServiceClient 对象调用 getContainerClient 方法,并以参数形式提供容器名称。 然后对 containerClient 对象使用 createIfNotExists 方法,以在 Azure 存储帐户中创建容器。 将 // Function Code here 注释行替换为以下语句:

    // Create a container (folder) if it does not exist
    const containerName = 'photos';
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const containerExists = await containerClient.exists()
    if ( !containerExists) {
        const createContainerResponse = await containerClient.createIfNotExists();
        console.log(`Create container ${containerName} successfully`, createContainerResponse.succeeded);
    }
    else {
        console.log(`Container ${containerName} already exists`);
    }
    
  6. 保存对 index.js 文件的更改。

  7. 在 Cloud Shell 命令行中,输入以下命令来生成并运行程序,以便在存储帐户中创建容器:

    node index.js
    

    提示

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

    首次运行该程序时,你应会看到一条消息,它显示容器已成功创建且状态为 true。 在第二次和后续运行程序时,将看到一条状态为 false 的类似消息,因为容器已存在。

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

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

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