使用 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,請參閱下列資源。
程式碼範例
- 檢視本文中的程式碼範例 (GitHub)
REST API 操作
適用於 Go 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 Go 典範與 REST API 作業進行互動。 用來下載 Blob 的用戶端程式庫方法會使用下列 REST API 作業:
- 取得 Blob (REST API)
用戶端模組資源
相關內容
- 本文是適用於 Go 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 Go 應用程式的完整開發人員指南文章清單。