分享方式:


使用 JAVA 下載 Blob

本文會說明如何使用適用於 JAVA 的 Azure 儲存體用戶端程式庫來下載 Blob。 您可以將 Blob 資料下載到各種目的地,包括本機檔案路徑、串流或文字字串。 您也可以開啟 Blob 串流並從中讀取。

必要條件

設定您的環境

如果沒有現有的專案,本章節會說明如何設定專案以使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫。 如需詳細資訊,請參閱開始使用 Azure Blob 儲存體和 JAVA (部分機器翻譯)。

若要使用本文中的程式碼範例,請遵循下列步驟來設定您的專案。

注意

本文使用 Maven 建置工具來建置和執行範例程式碼。 Gradle 等其他建置工具也能與適用於 Java 的 Azure SDK 搭配運作。

安裝套件

在文字編輯器中開啟 pom.xml 檔案。 包含 BOM 檔案包含直接相依性以安裝套件。

新增 import 陳述式

加入下列 import 陳述式:

import com.azure.storage.blob.*;
import com.azure.storage.common.*;
import com.azure.storage.blob.options.BlobDownloadToFileOptions;
import com.azure.storage.blob.specialized.*;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

授權

授權機制必須具有執行下載作業的必要權限。 針對使用 Microsoft Entra ID 的授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料讀者或更高的權限。 若要深入了解,請參閱取得 Blob (REST API) 的授權指導。

建立用戶端物件

若要將應用程式連線至 Blob 儲存體,請建立 BlobServiceClient類別的執行個體。

下列範例會使用 BlobServiceClientBuilder,使用 DefaultAzureCredential 建置 BlobServiceClient 物件,並視需要示範如何建立容器和 Blob 用戶端:

// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("<container-name>");

// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
        .getBlobClient("<blob-name>");

若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。

下載 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 操作

適用於 JAVA 的 Azure SDK 包含建置在 Azure REST API 上的程式庫,可讓您透過熟悉的 JAVA 典範與 REST API 作業進行互動。 用於下載 Blob 的用戶端程式庫方法會使用下列 REST API 作業:

用戶端程式庫資源

  • 本文是適用於 JAVA 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 JAVA 應用程式 (部分機器翻譯) 的開發人員指南文章完整清單。