使用 Java 下载 Blob

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

先决条件

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

下载 Blob

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

下载到文件路径

以下示例将 Blob 下载到本地文件路径:

public void downloadBlobToFile(BlobClient blobClient) {
    blobClient.downloadToFile("filepath/local-file.png");
}

下载到流

以下示例将 Blob 下载到 OutputStream 对象:

public void downloadBlobToStream(BlobClient blobClient) {
    try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
        blobClient.downloadStream(outputStream);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

下载到字符串

以下示例假定 Blob 是文本文件,并将 Blob 下载到 String 对象:

public void downloadBlobToText(BlobClient blobClient) {
    String content = blobClient.downloadContent().toString();
    System.out.printf("Blob contents: %s%n", content);
}

从流下载

以下示例通过打开 BlobInputStream 并从流中读取来下载 Blob:

public void readBlobFromStream(BlobClient blobClient) {
    // Opening a blob input stream allows you to read from a blob through a normal
    // stream interface

    try (BlobInputStream blobStream = blobClient.openInputStream()) {
        blobStream.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

使用配置选项下载块 blob

下载 blob 时,可以定义客户端库配置选项。 可以对这些选项进行调整,以提高性能和可靠性。 以下代码示例演示如何在调用下载方法时使用 BlobDownloadToFileOptions 来定义配置选项。

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

可以在 ParallelTransferOptions 中配置值,以提高数据传输操作的性能。 可根据应用需求针对下载调整以下值:

  • blockSize:要为每个请求传输的最大块大小。 可以使用 setBlockSizeLong 方法设置此值。
  • maxConcurrency:在任何给定时间,作为单个并行传输的一部分发出的最大并行请求数量。 可以使用 setMaxConcurrency 方法设置此值。

将以下 import 指令添加到你的文件,以便对下载使用 ParallelTransferOptions

import com.azure.storage.common.*;

下面的代码示例演示如何设置 ParallelTransferOptions 的值,以及如何将选项作为 BlobDownloadToFileOptions 实例的一部分包含在内。 此示例中提供的值不作为建议。 若要正确优化这些值,需要考虑应用的特定需求。

public void downloadBlobWithTransferOptions(BlobClient blobClient) {
    ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
            .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
            .setMaxConcurrency(2);

    BlobDownloadToFileOptions options = new BlobDownloadToFileOptions("<localFilePath>");
    options.setParallelTransferOptions(parallelTransferOptions);

    blobClient.downloadToFileWithResponse(options, null, null);
}

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

资源

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

REST API 操作

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

代码示例

客户端库资源