适用于 .NET 的 Azure Blob 存储客户端库入门。 Azure Blob 存储是适用于云的 Azure 的对象存储解决方案,针对存储海量非结构化数据进行了优化。
API 参考文档 | 库源代码 | 包 (NuGet) | 示例
本部分逐步指导如何准备一个项目,使其与适用于 .NET 的 Azure Blob 存储客户端库配合使用。
使用 .NET CLI 或 Visual Studio 2022 创建 .NET 控制台应用。
在 Visual Studio 顶部,导航到“文件”>“新建”>“项目”。
在对话框窗口中,在项目模板搜索框中输入“控制台应用”,然后选择第一个结果。 选择对话框底部的“下一步”。
对于“项目名称”,请输入“BlobQuickstart”。 保留其余字段的默认值,然后选择“下一步”。
对于 Framework,请确保已选择最新安装版本的 .NET。 然后选择“创建”。 此时新项目在 Visual Studio 环境中打开。
若要与 Azure Blob 存储交互,请安装适用于 .NET 的 Azure Blob 存储客户端库。
在解决方案资源管理器中,右键单击项目的“依赖项”节点。 选择“管理 NuGet 包”。
在出现的窗口中,搜索 Azure.Storage.Blobs。 选择相应的结果,然后选择“安装”。
替换 Program.cs
文件中的起始代码,使其与以下示例匹配,其中包括本练习所需的 using
语句。
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System;
using System.IO;
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Azure Blob 存储最适合存储巨量的非结构化数据。 非结构化数据并不遵循特定数据模型或定义(如文本或二进制数据)。 Blob 存储提供了三种类型的资源:
- 存储帐户
- 存储帐户中的容器
- 容器中的 blob
以下图示显示了这些资源之间的关系。
使用以下 .NET 类与这些资源进行交互:
- BlobServiceClient:
BlobServiceClient
类可用于操纵 Azure 存储资源和 blob 容器。 - BlobContainerClient:
BlobContainerClient
类可用于操纵 Azure 存储容器及其 blob。 - BlobClient:
BlobClient
类可用于操纵 Azure 存储 blob。
以下部分中的示例代码片段演示如何使用适用于 .NET 的 Azure Blob 存储客户端库执行以下任务:
重要
如设置部分所述,请确保已安装正确的 NuGet 包并添加了必要的 using 语句以使代码示例能够正常工作。
对 Azure Blob 存储的应用程序请求必须获得授权。 要在代码中实现与 Azure 服务(包括 Blob 存储)的无密码连接,推荐使用 azure-identity 客户端库提供的 DefaultAzureCredential
类。
你还可以使用帐户访问密钥授权对 Azure Blob 存储的请求。 但是,应谨慎使用此方法。 开发人员必须尽量避免在不安全的位置公开访问密钥。 具有访问密钥的任何人都可以授权针对存储帐户的请求,并且实际上有权访问所有数据。 DefaultAzureCredential
提供比帐户密钥更好的管理和安全优势,来实现无密码身份验证。 以下示例演示了这两个选项。
连接字符串包括存储帐户访问密钥,并使用它来授权请求。 请始终小心,不要在不安全的位置公开密钥。
备注
若要使用存储帐户访问密钥授权数据访问,需要以下 Azure RBAC 操作的权限:Microsoft.Storage/storageAccounts/listkeys/action。 具有此操作权限的最小特权内置角色是读取者和数据访问,但包含此操作的任何角色都将起作用。
登录 Azure 门户。
找到自己的存储帐户。
在存储帐户菜单窗格中的“安全性 + 网络”下,选择“访问密钥”。 在这里,可以查看帐户访问密钥以及每个密钥的完整连接字符串。
在“访问密钥”窗格中,选择“显示密钥”。
在“key1”部分,找到“连接字符串”值。 选择“复制到剪贴板”图标来复制该连接字符串。 在下一部分,你要将此连接字符串值添加到某个环境变量。
在复制连接字符串后,请将其写入到运行该应用程序的本地计算机上的新环境变量。 若要设置环境变量,请打开控制台窗口,并遵照适用于操作系统的说明。 将 <yourconnectionstring>
替换为实际的连接字符串。
Windows:
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
在 Windows 中添加环境变量后,必须启动命令窗口的新实例。 如果在 Windows 上使用 Visual Studio,可能需要在创建环境变量后重新启动 Visual Studio 才能检测到更改。
Linux:
export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"
下面的代码从之前创建的环境变量中检索存储帐户的连接字符串,并使用连接字符串构造服务客户端对象。
在 Program.cs
文件的末尾添加以下代码:
// Retrieve the connection string for use with the application.
string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
// Create a BlobServiceClient object
var blobServiceClient = new BlobServiceClient(connectionString);
重要
应谨慎使用帐户访问密钥。 如果帐户访问密钥丢失或意外放置在不安全的位置,服务可能会变得易受攻击。 具有访问密钥的任何人都可以授权针对存储帐户的请求,并且实际上有权访问所有数据。 DefaultAzureCredential
提供增强的安全功能和优势,是管理 Azure 服务授权的推荐方法。
通过在 blobServiceClient
对象上调用 CreateBlobContainerAsync 方法,在存储帐户中创建新容器。 在此示例中,代码将 GUID 值追加到容器名称,以确保它是唯一的。
在 Program.cs
文件的末尾添加以下代码:
// TODO: Replace <storage-account-name> with your actual storage account name
var blobServiceClient = new BlobServiceClient(
new Uri("https://<storage-account-name>.blob.core.chinacloudapi.cn"),
new DefaultAzureCredential());
//Create a unique name for the container
string containerName = "quickstartblobs" + Guid.NewGuid().ToString();
// Create the container and return a container client object
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
若要详细了解如何创建容器并浏览更多代码示例,请参阅使用 .NET 创建 Blob 容器。
重要
容器名称必须为小写。 有关命名容器和 Blob 的详细信息,请参阅命名和引用容器、Blob 和元数据。
使用 UploadAsync 将 blob 上传到容器。 示例代码将在本地数据目录中创建文本文件以上传到容器。
在 Program.cs
文件的末尾添加以下代码:
// Create a local file in the ./data/ directory for uploading and downloading
string localPath = "data";
Directory.CreateDirectory(localPath);
string fileName = "quickstart" + Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);
// Write text to the file
await File.WriteAllTextAsync(localFilePath, "Hello, World!");
// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient(fileName);
Console.WriteLine("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);
// Upload data from the local file, overwrite the blob if it already exists
await blobClient.UploadAsync(localFilePath, true);
若要详细了解如何上传 Blob 并浏览更多代码示例,请参阅使用 .NET 上传 Blob。
通过调用 GetBlobsAsync 方法,列出容器中的 blob。
在 Program.cs
文件的末尾添加以下代码:
Console.WriteLine("Listing blobs...");
// List all blobs in the container
await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
{
Console.WriteLine("\t" + blobItem.Name);
}
若要详细了解如何列出 Blob 并浏览更多代码示例,请参阅使用 .NET 列出 Blob。
通过调用 DownloadToAsync 方法下载之前创建的 blob。 示例代码会将字符串“DOWNLOADED”追加到文件名,以便你可以在本地文件系统中看到这两个文件。
在 Program.cs
文件的末尾添加以下代码:
// Download the blob to a local file
// Append the string "DOWNLOADED" before the .txt extension
// so you can compare the files in the data directory
string downloadFilePath = localFilePath.Replace(".txt", "DOWNLOADED.txt");
Console.WriteLine("\nDownloading blob to\n\t{0}\n", downloadFilePath);
// Download the blob's contents and save it to a file
await blobClient.DownloadToAsync(downloadFilePath);
若要详细了解如何下载 Blob 并浏览更多代码示例,请参阅使用 .NET 下载 Blob。
以下代码将使用 DeleteAsync 来删除容器,以清理应用创建的资源。 该代码示例还会删除应用创建的本地文件。
在删除 blob、容器和本地文件之前,应用会调用 Console.ReadLine
以暂停并等待用户输入。 可以通过此机会验证是否已正确创建资源,然后再删除这些资源。
在 Program.cs
文件的末尾添加以下代码:
// Clean up
Console.Write("Press any key to begin clean up");
Console.ReadLine();
Console.WriteLine("Deleting blob container...");
await containerClient.DeleteAsync();
Console.WriteLine("Deleting the local source and downloaded files...");
File.Delete(localFilePath);
File.Delete(downloadFilePath);
Console.WriteLine("Done");
若要详细了解如何删除容器并浏览更多代码示例,请参阅使用 .NET 删除和还原 Blob 容器。
完成这些步骤后,Program.cs
文件中的代码现在应如下所示:
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
// TODO: Replace <storage-account-name> with your actual storage account name
var blobServiceClient = new BlobServiceClient("<storage-account-connection-string>");
//Create a unique name for the container
string containerName = "quickstartblobs" + Guid.NewGuid().ToString();
// Create the container and return a container client object
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
// Create a local file in the ./data/ directory for uploading and downloading
string localPath = "data";
Directory.CreateDirectory(localPath);
string fileName = "quickstart" + Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);
// Write text to the file
await File.WriteAllTextAsync(localFilePath, "Hello, World!");
// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient(fileName);
Console.WriteLine("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);
// Upload data from the local file
await blobClient.UploadAsync(localFilePath, true);
Console.WriteLine("Listing blobs...");
// List all blobs in the container
await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
{
Console.WriteLine("\t" + blobItem.Name);
}
// Download the blob to a local file
// Append the string "DOWNLOADED" before the .txt extension
// so you can compare the files in the data directory
string downloadFilePath = localFilePath.Replace(".txt", "DOWNLOADED.txt");
Console.WriteLine("\nDownloading blob to\n\t{0}\n", downloadFilePath);
// Download the blob's contents and save it to a file
await blobClient.DownloadToAsync(downloadFilePath);
// Clean up
Console.Write("Press any key to begin clean up");
Console.ReadLine();
Console.WriteLine("Deleting blob container...");
await containerClient.DeleteAsync();
Console.WriteLine("Deleting the local source and downloaded files...");
File.Delete(localFilePath);
File.Delete(downloadFilePath);
Console.WriteLine("Done");
此应用在本地 data 文件夹中创建测试文件,并将其上传到 Blob 存储。 然后,该示例会列出容器中的 blob,并使用新名称下载文件,这样便可对新旧文件进行对比。
如果使用 Visual Studio,请按 F5 生成并运行代码,并与控制台应用交互。 如果使用的是 .NET CLI,请导航到应用程序目录,然后生成并运行该应用程序。
dotnet build
dotnet run
应用的输出类似于以下示例(为便于阅读,省略了 GUID 值):
Azure Blob Storage - .NET quickstart sample
Uploading to Blob storage as blob:
https://mystorageacct.blob.core.chinacloudapi.cn/quickstartblobsGUID/quickstartGUID.txt
Listing blobs...
quickstartGUID.txt
Downloading blob to
./data/quickstartGUIDDOWNLOADED.txt
Press any key to begin clean up
Deleting blob container...
Deleting the local source and downloaded files...
Done
在开始清理过程之前,请在“data”文件夹中查看这两个文件。 可打开它们,然后就会看到它们完全相同。
验证文件并完成测试后,请按 Enter 键删除测试文件以及在存储帐户中创建的容器。 还可以使用 Azure CLI 来删除资源。