分享方式:


使用 .NET 從來源物件 URL 複製 Blob

本文說明如何使用適用於 .NET 的 Azure 儲存體用戶端程式庫,從來源物件 URL 複製 Blob。 您可以從相同儲存體帳戶內的來源、從不同儲存體帳戶中的來源,或從任何透過 HTTP GET 要求在指定 URL 上擷取的可存取物件來複製 Blob。

本文涵蓋的用戶端程式庫方法使用 Put Blob From URLPut Block From URL REST API 作業。 針對您想要將資料移至儲存體帳戶並具有來源物件 URL 的複製情節,這些是優先使用的方法。 針對您想要進行非同步排程的複製作業,請參閱使用 .NET 複製具有非同步排程的 Blob

必要條件

設定您的環境

如果沒有現有的專案,本章節會說明如何設定專案以使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫。 這些步驟包括封裝安裝、新增 using 指示詞,以及建立已授權的用戶端物件。 如需詳細資訊,請參閱 開始使用 Azure Blob 儲存體和 .NET

安裝套件

從您的專案目錄中,使用 dotnet add package 命令安裝 Azure Blob 儲存體和 Azure 身分識別客戶端程式庫的套件。 需要 Azure.Identity 套件才能對 Azure 服務進行無密碼連線。

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

新增 using 指示詞

將這些 using 指示詞新增至程式碼檔案頂端:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

本文中的某些程式碼範例可能需要其他using指示詞。

建立用戶端物件

若要將應用程式連線至 Blob 儲存體,請建立 BlobServiceClient類別的執行個體。 下列範例示範如何使用 DefaultAzureCredential 來建立用戶端物件以進行授權:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

您可以在 .NET 應用程式中註冊相依性插入的服務用戶端。

您也可以為特定容器Blob 建立客戶端物件。 若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。

授權

授權機制必須具有執行複製作業的必要權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱從 URL 放置 Blob (REST API)從 URL 放置區塊 (REST API) 的授權指導。

關於從來源物件 URL 複製 Blob

Put Blob From URL 作業會建立新的區塊 Blob,其中 Blob 的內容會從指定的 URL 讀取。 作業會同步完成。

來源可以是透過指定 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 From URL API 和 Put Block List

若要深入了解 Put Blob From URL 作業,包括 Blob 大小限制和計費考量事項,請參閱 Put Blob From URL 備註 (部分機器翻譯)。

從來源物件 URL 複製 Blob

本節概述了適用於 .NET 的 Azure 儲存體用戶端程式庫對從來源物件 URL 執行複製作業所提供的方法。

下列方法會包裝 Put Blob From URL REST API 作業,並建立新的區塊 Blob,其中 Blob 的內容會從指定的 URL 讀取:

針對您想要將資料移至儲存體帳戶並具有來源物件 URL 的情節,這些是優先使用的方法。

對於大型物件,您可以選擇使用個別區塊。 下列方法會包裝 Put Block From URL REST API 作業。 這個方法會建立新的區塊,以作為從來源 URL 讀取內容的 Blob 一部分認可:

從 Azure 中的來源複製 Blob

如果您要從 Azure 內的來源複製 Blob,可以透過 Microsoft Entra ID、共用存取簽章 (SAS) 或帳戶金鑰來授權來源 Blob 的存取權。

下列範例顯示從 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

您可以在透過 HTTP GET 要求於指定 URL 擷取的任何來源物件上,執行複製作業,包括 Azure 外部的可存取物件。 下列範例示範從可存取的來源物件 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 儲存體用戶端程式庫來複製 Blob,請參閱下列資源。

程式碼範例

REST API 操作

適用於 .NET 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 .NET 範例與 REST API 作業進行互動。 本文中涵蓋的用戶端程式庫方法會使用下列 REST API 作業:

用戶端程式庫資源

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