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

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

この記事で説明するクライアント ライブラリ メソッドでは、Put Blob From URL および Put Block From URL REST API 操作を使用します。 これらのメソッドは、ストレージ アカウントにデータを移動する必要があり、ソース オブジェクトの URL がわかっているコピー シナリオに適しています。 非同期スケジュールを設定するコピー操作については、「.NET を使用して非同期スケジュールを使用して BLOB をコピーする」を参照してください。

前提条件

  • この記事では、.NET 用の Azure Blob Storage クライアント ライブラリを操作するようにプロジェクトが既に設定されていることを前提としています。 パッケージのインストール、using ディレクティブの追加、認可されたクライアント オブジェクトの作成など、プロジェクトの設定については、「Azure Blob Storage と .NET の作業開始」を参照してください。
  • 認可メカニズムには、コピー操作を実行するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。

ソース オブジェクト 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 からコピー操作を実行するために、.NET 用の 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 からコピーするシナリオを示しています。 SyncUploadFromUriAsync メソッドは、例に示すように、必要に応じてブール型パラメーターを受け入れて、既存の BLOB を上書きするかどうかを示すことができます。 overwrite パラメーターの既定値は、false です。

//-------------------------------------------------
// Copy a blob from the same storage account
//-------------------------------------------------
public static async Task CopyWithinStorageAccountAsync(
    BlobClient sourceBlob,
    BlockBlobClient destinationBlob)
{
    // Get the source blob URI and create the destination blob
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceBlob.Uri/*, overwrite: false*/);
}

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

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

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

//-------------------------------------------------
// Copy a blob from an external source
//-------------------------------------------------
public static async Task CopyFromExternalSourceAsync(
    string sourceLocation,
    BlockBlobClient destinationBlob)
{
    Uri sourceUri = new(sourceLocation);

    // Create the destination blob from the source URL
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceUri/*, overwrite: false*/);
}

リソース

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

REST API の操作

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

コード サンプル

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