次の方法で共有


Java を使用して BLOB をダウンロードする

この記事では、Java 用の Azure Storage クライアント ライブラリを使用して BLOB をダウンロードする方法について説明します。 BLOB データは、ローカル ファイル パス、ストリーム、テキスト文字列など、さまざまな宛先にダウンロードできます。 BLOB ストリームを開き、そこから読み取ることもできます。

前提条件

環境を設定する

既存のプロジェクトがない場合、Java 用 Azure Blob Storage クライアント ライブラリを操作するためにプロジェクトをセットアップする方法について、このセクションで説明します。 詳細については、「Azure Blob Storage と Java での作業開始」を参照してください。

この記事のコード例を使用するには、次の手順に従ってプロジェクトを設定します。

Note

この記事では Maven ビルド ツールを使用して、コード例をビルドして実行します。 Gradle などの他のビルド ツールも、Azure SDK for Java で動作します。

パッケージをインストールする

テキスト エディターで 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 組み込みロールの Storage BLOB データ閲覧者以上が必要です。 詳細については、Get Blob (REST API) に関するページの認可のガイダンスを参照してください。

クライアント オブジェクトの作成

アプリを Blob Storage に接続するには、 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: 1 回の並列転送の一部として、任意の時点で発行される並列要求の最大数。 この値は、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 Storage クライアント ライブラリを使用して BLOB をダウンロードする方法の詳細については、次のリソースを参照してください。

コード サンプル

REST API の操作

Azure SDK for Java には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Java パラダイムを通じて REST API 操作を実施できます。 BLOB をダウンロードするためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。

クライアント ライブラリのリソース

  • この記事は、Java の Blob Storage 開発者ガイドの一部です。 詳しくは、Java アプリの構築に関するセクションにある開発者ガイド記事の完全な一覧をご覧ください。