Java を使用してソース オブジェクト URL から BLOB をコピーする

この記事では、Java 用 Azure Storage クライアント ライブラリを使用してソース オブジェクト URL から BLOB をコピーする方法について説明します。 BLOB は、同じストレージ アカウント内のソースからでも、別のストレージ アカウント内のソースからでも、特定の URL に対する HTTP GET 要求を介して取得されたアクセス可能なオブジェクトからでもコピーできます。

この記事で説明するクライアント ライブラリ メソッドでは、Put Blob From URL および Put Block From URL REST API 操作を使用します。 これらのメソッドは、ストレージ アカウントにデータを移動する必要があり、ソース オブジェクトの URL がわかっているコピー シナリオに適しています。 非同期スケジュールを設定するコピー操作については、「Java を使用して非同期スケジュールを設定して 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.blob.specialized.*;

承認

認可メカニズムには、コピー操作を実行するために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールのストレージ BLOB データ共同作成者以上が必要です。 詳細については、「Put Blob From URL (REST API)」と「Put Block From URL (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>");

クライアント オブジェクトの作成と管理の詳細については、「データ リソースを操作するクライアント オブジェクトを作成および管理する」を参照してください。

ソース オブジェクト URL からの BLOB のコピーについて

Put Blob From URL 操作により、BLOB のコンテンツが特定の URL から読み取られる新しいブロック BLOB が作成されます。 操作は同期的に完了します。

ソースには、指定された URL に対する標準の HTTP GET 要求を介して取得できる任意のオブジェクトを指定できます。 これには、ブロック BLOB、追加 BLOB、ページ BLOB、BLOB スナップショット、BLOB バージョン、または Azure 内外のアクセス可能なオブジェクトが含まれます。

ソース オブジェクトがブロック BLOB の場合、コミットされたすべての BLOB コンテンツがコピーされます。 ただし、ブロック一覧は保持されず、コミットされていないブロックはコピーされません。 コピー先 BLOB のコンテンツはソースのコンテンツと同じですが、コミットされたブロック一覧は保持されません。

コピー先は常にブロック BLOB であり、既存のブロック BLOB でも、操作で作成される新しいブロック BLOB でもかまいません。 既存の BLOB のコンテンツは、新しい BLOB のコンテンツで上書きされます。

Put Blob From URL 操作では、常にソース BLOB 全体がコピーされます。 バイト範囲またはブロックのセットのコピーはサポートされていません。 ソース URL を使用してブロック BLOB のコンテンツに部分的な更新を実行するには、Put Block List と共に Put Block From URL API を使用します。

BLOB サイズの制限事項や課金に関する考慮事項など Put Blob From URL 操作の詳細については、URL リマークからの BLOB の配置に関するページを参照してください。

ソース オブジェクト URL から BLOB をコピーする

このセクションでは、ソース オブジェクト URL からコピー操作を実行するために、Java 用の Azure Storage クライアント ライブラリによって提供されるメソッドの概要について説明します。

次のメソッドは、Put Blob From URL REST API 操作をラップし、BLOB のコンテンツが特定の URL から読み取られる新しいブロック BLOB を作成します。

これらのメソッドは、ストレージ アカウントにデータを移動する必要があり、ソース オブジェクトの URL がわかっているシナリオに適しています。

大きなオブジェクトの場合は、個々のブロックを操作できます。 次のメソッドは、Put Block From URL REST API 操作をラップします。 次のメソッドでは、コンテンツがソース URL から読み取られる BLOB の一部としてコミットされる新しいブロックが作成されます。

Azure 内のソースから BLOB をコピーする

Azure 内のソースから BLOB をコピーする場合、ソース BLOB へのアクセスは、Microsoft Entra ID、共有アクセス署名 (SAS)、またはアカウント キーを使って承認できます。

次の例は、Azure 内でソース BLOB からコピーするシナリオを示しています。 uploadFromUrl メソッドは、例に示すように、必要に応じてブール型パラメーターを受け入れて、既存の BLOB を上書きするかどうかを示すことができます。

public void copyFromSourceInAzure(BlobClient sourceBlob, BlockBlobClient destinationBlob) {
    // Get the source blob URL and create the destination blob
    // set overwrite param to true if you want to overwrite an existing blob
    destinationBlob.uploadFromUrl(sourceBlob.getBlobUrl(), false);
}

uploadFromUrlWithResponse メソッドは、BlobUploadFromUrlOptions パラメーターを受け入れて、操作のその他のオプションを指定することもできます。

外部ソースから BLOB をコピーする

Azure 外部にあるアクセス可能なオブジェクトを含め、特定の URL に対する HTTP GET 要求を介して取得できる任意のソース オブジェクトにコピー操作を実行できます。 次の例は、アクセス可能なソース オブジェクト URL から BLOB をコピーするシナリオを示しています。

public void copyFromExternalSource(String sourceURL, BlockBlobClient destinationBlob) {
    // Create the destination blob from the source URL
    // set overwrite param to true if you want to overwrite an existing blob
    destinationBlob.uploadFromUrl(sourceURL, false);
}

リソース

Java 用 Azure Blob Storage クライアント ライブラリを使用した BLOB のコピーの詳細については、次のリソースを参照してください。

コード サンプル

REST API の操作

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

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

  • この記事は、Java の Blob Storage 開発者ガイドの一部です。 詳細については、「Java アプリのビルド」にある開発者ガイドの記事の完全な一覧を参照してください。