练习 - 将应用程序连接到 Azure 存储帐户
Azure 存储客户端库提供了一个用于与 Azure 存储帐户进行交互的对象模型。 它用于快速连接到 Azure 存储帐户并使用 Azure 存储服务 API。
Azure 存储客户端库对象模型
Azure 中的存储帐户将整合到一个或多个容器中,这些容器用于存储帐户中的实际 blob 对象(文件)。 这些容器与文件系统中的文件夹类似。 我们可以使用适用于 .NET 的 Azure 存储 Blob 客户端库在存储帐户中创建一个容器,以将照片存储到其中。
若要在程序中使用适用于 .NET 的 Azure 存储 Blob 客户端库,需要在程序顶部添加一个针对 Azure.Storage.Blobs
命名空间的 using
语句。
将以下命令添加到 Program.cs。
using Azure.Storage.Blobs;
若要通过 .NET 应用程序中的存储帐户创建和管理容器,则可使用
BlobContainerClient
对象。 若要实例化BlobContainerClient
对象,则必须提供存储帐户的连接字符串和容器名称。 容器名称的长度必须介于 3 到 63 个字符之间,并且只能包含小写字母和短划线 (-)。 对于此应用程序,将使用“照片”作为名称。将以下代码添加到应用程序的 Main 部分,以获取 Azure 存储连接字符串并创建
BlobContainerClient
对象。var connectionString = configuration.GetConnectionString("StorageAccount"); string containerName = "photos"; BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
注意
此时,客户端库尚未尝试连接到 Azure,也不会验证正在使用的连接字符串和访问密钥。 它只是构建了一个用于对 Azure Blob 存储执行操作的轻型客户端对象。 仅当对存储帐户调用某个操作时,网络调用才会执行。
在前面几行下面,添加用于创建“照片”容器(用来存储图像)的代码。
container.CreateIfNotExists();
保存文件。
此时运行应用程序,让它在存储帐户中创建该容器。 由于我们使用了
CreateIfNotExists
方法,因此可以运行程序多次,但该容器只会在首次运行时创建。dotnet run
你可以运行以下 Azure CLI 命令来验证该容器是否已创建。 请记住,要将
<name>
替换为你的存储帐户名称。az storage container list \ --account-name <name>
适用于 JavaScript 的 Azure 存储 Blob 客户端库包含许多用于与 Azure 存储 Blob 交互的客户端对象。 此层次结构的顶部是 BlobServiceClient
对象。 若要在 JavaScript 代码中使用此对象:
在代码编辑器中打开 index.js 文件,紧接在
require('dotenv').config();
语句后面添加以下语句:const { BlobServiceClient } = require("@azure/storage-blob");
现在,你需要获取存储帐户连接字符串并将其传递到
BlobServiceClient
对象上的工厂方法fromConnectionString
,从而在代码中创建BlobServiceClient
对象。 添加以下代码行:const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING; const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString);
注意
在调用需要 Azure 的操作之前,客户端库不会尝试连接到 Azure。 客户端对象是一个轻量级对象,便于访问 Azure Blob 存储;它不验证所使用的连接或访问密钥。
在程序中定义客户端对象后,可使用客户端对象上的方法执行实际工作。 进行网络调用的方法是特意设置为异步的。 库使用承诺来返回异步结果。 因此,需要将 main 函数标记为异步。 将 main 函数对象替换为以下代码。 以两个正斜杠开头的行是注释。
async function main() { // Function code here }
保存对 index.js 所做的更改。
现在,让我们添加一些代码来执行针对存储帐户的操作。 存储帐户将整合到一个或多个容器,这些容器的作用类似存储帐户中的文件夹。 在存储帐户中创建的 blob 对象(文件)将存储在其中一个容器中。 你需要在存储帐户中创建一个容器,以用于存储照片。
容器名称的长度必须介于 3 到 63 个字符之间,并且只能包含小写字母和短划线 (-)。 对于此应用程序,将使用“照片”作为名称。
你需要获取一个表示存储帐户中容器的
ContainerClient
对象,以在存储帐户中创建容器。 即使存储帐户中尚不存在容器,我们也可以使用ContainerClient
创建容器并在容器创建后对其进行管理。若要获取
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`); }
保存对 index.js 文件的更改。
在 Cloud Shell 命令行中,输入以下命令来生成并运行程序,以便在存储帐户中创建容器:
node index.js
提示
如果在使用
await
关键字时遇到错误,请确保已按照前面说明中的最后一步将async
关键字添加到了main
函数定义中。首次运行该程序时,你应会看到一条消息,它显示容器已成功创建且状态为 true。 在第二次和后续运行程序时,将看到一条状态为 false 的类似消息,因为容器已存在。
你可以运行以下 Azure CLI 命令来验证该容器是否已创建。 请记住,要将
<name>
替换为你的存储帐户名称。az storage container list \ --account-name <name>
既然程序已连接到 Azure 存储帐户,并且“照片”容器已创建,接下来我们就让程序向该容器上传图像。