使用 .NET 下载 Blob

本文介绍了如何使用适用于 .NET 的 Azure 存储客户端库下载 Blob。 可以将 Blob 数据下载到各种目标,包括本地文件路径、流或文本字符串。 还可以打开 Blob 流并从中读取。

先决条件

  • 本文假设已经设置了项目来使用适用于 .NET 的 Azure Blob 存储客户端库。 要了解有关设置项目的信息,包括包安装、添加 using 指令和创建授权客户端对象,请参阅开始使用 Azure Blob 存储和 .NET
  • 授权机制必须具有执行下载操作的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:

下载 Blob

可以使用以下任一方法来下载 Blob:

你还可以打开一个流来读取 Blob。 流只在被读取时下载 Blob。 可以使用以下方法之一:

下载到文件路径

以下示例将 blob 下载到本地文件路径。 如果指定的目录不存在,则代码将引发 DirectoryNotFoundException。 如果该文件已存在于 localFilePath,后续下载过程则会默认覆盖该文件。

public static async Task DownloadBlobToFileAsync(
    BlobClient blobClient,
    string localFilePath)
{
    await blobClient.DownloadToAsync(localFilePath);
}

下载到流

以下示例通过创建 Stream 对象并下载该流来下载 Blob。 如果指定的目录不存在,则代码将引发 DirectoryNotFoundException

public static async Task DownloadBlobToStreamAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    await blobClient.DownloadToAsync(fileStream);

    fileStream.Close();
}

下载到字符串

以下示例假定 Blob 是文本文件,并将 Blob 下载为字符串:

public static async Task DownloadBlobToStringAsync(BlobClient blobClient)
{
    BlobDownloadResult downloadResult = await blobClient.DownloadContentAsync();
    string blobContents = downloadResult.Content.ToString();
}

从流下载

以下示例通过读取流来下载 Blob:

public static async Task DownloadBlobFromStreamAsync(
    BlobClient blobClient,
    string localFilePath)
{
    using (var stream = await blobClient.OpenReadAsync())
    {
        FileStream fileStream = File.OpenWrite(localFilePath);
        await stream.CopyToAsync(fileStream);
    }
}

使用配置选项下载块 blob

下载 blob 时,可以定义客户端库配置选项。 可以对这些选项进行调整,以提高性能和可靠性。 以下代码示例演示如何在调用下载方法时使用 BlobDownloadToOptions 来定义配置选项。 请注意,也为 BlobDownloadOptions 提供相同的选项。

在下载时指定数据传输选项

可以在 StorageTransferOptions 中配置值,以提高数据传输操作的性能。 下面的代码示例演示如何设置 StorageTransferOptions 的值,以及如何将选项作为 BlobDownloadToOptions 实例的一部分包含在内。 此示例中提供的值不作为建议。 若要正确优化这些值,需要考虑应用的特定需求。

public static async Task DownloadBlobWithTransferOptionsAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    var transferOptions = new StorageTransferOptions
    {
        // Set the maximum number of parallel transfer workers
        MaximumConcurrency = 2,

        // Set the initial transfer length to 8 MiB
        InitialTransferSize = 8 * 1024 * 1024,

        // Set the maximum length of a transfer to 4 MiB
        MaximumTransferSize = 4 * 1024 * 1024
    };

    BlobDownloadToOptions downloadOptions = new BlobDownloadToOptions()
    {
        TransferOptions = transferOptions
    };

    await blobClient.DownloadToAsync(fileStream, downloadOptions);

    fileStream.Close();
}

若要详细了解如何优化数据传输选项,请参阅上传和下载的性能优化

在下载时指定传输验证选项

可以指定传输验证选项,以帮助确保正确下载数据并且在传输过程中未被篡改。 可以使用 BlobClientOptions 在客户端级别定义传输验证选项,它会将验证选项应用于从 BlobClient 实例调用的所有方法。

还可以使用 BlobDownloadToOptions 在方法级别替代传输验证选项。 下面的代码示例演示如何创建 BlobDownloadToOptions 对象并指定用于生成校验和的算法。 然后,服务使用校验和来验证已下载内容的数据完整性。

public static async Task DownloadBlobWithChecksumAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    var validationOptions = new DownloadTransferValidationOptions
    {
        AutoValidateChecksum = true,
        ChecksumAlgorithm = StorageChecksumAlgorithm.Auto
    };

    BlobDownloadToOptions downloadOptions = new BlobDownloadToOptions()
    {
        TransferValidation = validationOptions
    };

    await blobClient.DownloadToAsync(fileStream, downloadOptions);

    fileStream.Close();
}

下表显示了 StorageChecksumAlgorithm 定义的校验和算法的可用选项:

名称 说明
Auto 0 推荐。 允许库选择算法。 不同的库版本可能会选择不同的算法。
1 没有选定的算法。 不要计算或请求校验和。
MD5 2 标准 MD5 哈希算法。
StorageCrc64 3 Azure 存储自定义 64 位 CRC。

资源

若要详细了解如何使用适用于 .NET 的 Azure Blob 存储客户端库来下载 Blob,请参阅以下资源。

REST API 操作

Azure SDK for .NET 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 .NET 范例与 REST API 操作进行交互。 用于下载 blob 的客户端库方法使用以下 REST API 操作:

代码示例

客户端库资源

另请参阅