分享方式:


使用 Go 下載 Blob

本文會說明如何使用適用於 Go 的 Azure 儲存體用戶端模組來下載 Blob。 您可以將 Blob 資料下載到各種目的地,包括本機檔案路徑、資料流或文字字串。

必要條件

設定您的環境

如果沒有現有的專案,本節說明如何設定專案以使用適用於 Go 的 Azure Blob 儲存體用戶端模組。 這些步驟包括模組安裝、新增 import 路徑,以及建立已授權的用戶端物件。 如需詳細資訊,請參閱開始使用 Azure Blob 儲存體和 Go

安裝模組

使用下列命令安裝 azblob 模組:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

若要使用 Microsoft Entra ID 進行驗證 (建議使用),請使用下列命令安裝 azidentity 模組:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

新增匯入路徑

在您的程式碼檔案中,新增下列匯入路徑:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

這些匯入路徑代表開始使用所需的最小值。 本文中的某些程式碼範例可能需要其他匯入路徑。 如需特定詳細資料和範例使用方式,請參閱程式碼範例

建立用戶端物件

若要將應用程式連線至 Blob 記憶體,請使用 azblob.NewClient 建立用戶端物件。 下列範例示範如何使用 DefaultAzureCredential 來建立用戶端物件以進行授權:

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

授權

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

下載 Blob

您可以使用下列任一方法來下載 Blob:

下載至檔案路徑

下列範例將 Blob 下載至檔案路徑:

func downloadBlobToFile(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
    file, err := os.Create("path/to/sample/file")
    handleError(err)

    // Download the blob to the local file
    _, err = client.DownloadFile(context.TODO(), containerName, blobName, file, nil)
    handleError(err)
}

下載至串流

下列範例會呼叫 NewRetryReader 方法,將 Blob 下載至資料流,並從資料流讀取。

func downloadBlobToStream(client *azblob.Client, containerName string, blobName string) {
    // Download the blob
    get, err := client.DownloadStream(context.TODO(), containerName, blobName, nil)
    handleError(err)

    downloadedData := bytes.Buffer{}
    retryReader := get.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{})
    _, err = downloadedData.ReadFrom(retryReader)
    handleError(err)

    err = retryReader.Close()
    handleError(err)

    // Print the contents of the blob we created
    fmt.Println("Blob contents:")
    fmt.Println(downloadedData.String())
}

指定下載的數據傳輸選項

下載 Blob 以將效能優化時,您可以設定組態選項。 下列組態選項可用於下載作業:

  • BlockSize:下載區塊 Blob 時每個區塊的大小。 預設值為 4 MB。
  • Concurrency:下載期間要使用的平行連線數目上限。 預設值是 5。

使用下列方法下載時,可以使用這些選項:

DownloadStream 方法不支持這些選項,並在單一要求中下載數據。

如需 Blob 儲存體傳輸大小限制的詳細資訊,請參閱調整 Blob 儲存體的目標

下列程式代碼範例示範如何使用 DownloadFileOptions 指定數據傳輸選項。 此範例中提供的值並非旨在作為建議。 若要正確調整這些值,您必須考慮應用程式的特定需求。

func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
    file, err := os.Create("path/to/sample/file")
    handleError(err)

    // Download the blob to the local file
    _, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
        &azblob.DownloadFileOptions{
            BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

若要深入瞭解微調數據傳輸選項,請參閱 使用 Go 進行上傳和下載的效能微調。

注意

本指南中的程式碼範例旨在協助您開始使用 Azure Blob 儲存體和 Go。 您應該修改錯誤處理和 Context 值,以符合您應用程式的需求。

資源

若要深入了解如何使用適用於 Go 的 Azure Blob 儲存體用戶端模組下載 Blob,請參閱下列資源。

程式碼範例

REST API 操作

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

用戶端模組資源

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