使用 Go 上傳區塊 Blob
本文說明如何使用適用於 Go 的 Azure 儲存體用戶端模組來上傳 Blob。 您可以從檔案路徑、資料流、二進位物件或文字字串將資料上傳至區塊 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
}
授權
授權機制必須具有上傳 Blob 的必要權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱放置 Blob (REST API) 和放置區塊 (REST API)的授權指引。
將資料上傳至區塊 Blob
若要上傳 Blob,請從用戶端物件呼叫下列任何方法:
若要執行上傳,用戶端程式庫可能使用放置區塊或一系列放置區域呼叫,後面接著 Put Block List
。 此行為取決於 Blob 的總大小,以及資料傳輸選項的設定方式。
從本機檔案路徑上傳區塊 Blob
下列範例會將本機檔案上傳至區塊 Blob:
func uploadBlobFile(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the file to the specified container with the specified blob name
_, err = client.UploadFile(context.TODO(), containerName, blobName, file, nil)
handleError(err)
}
從資料流上傳區塊 Blob
下列範例會建立 Reader
執行個體並從字串讀取,就像是位元組資料流一樣。 然後,資料流會上傳至區塊 Blob:
func uploadBlobStream(client *azblob.Client, containerName string, blobName string) {
data := "Hello, world!"
blobContentReader := strings.NewReader(data)
// Upload the file to the specified container with the specified blob name
_, err := client.UploadStream(context.TODO(), containerName, blobName, blobContentReader, nil)
handleError(err)
}
將二進位資料上傳至區塊 Blob
下列範例會將二進位資料上傳至區塊 Blob:
func uploadBlobBuffer(client *azblob.Client, containerName string, blobName string) {
// Create a buffer with the content of the file to upload
data := []byte("Hello, world!")
// Upload the data to a block blob
_, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, nil)
handleError(err)
}
使用索引標籤上傳區塊 Blob
下列範例會使用索引標籤上傳區塊 Blob:
func uploadBlobWithIndexTags(client *azblob.Client, containerName string, blobName string) {
// Create a buffer with the content of the file to upload
data := []byte("Hello, world!")
// Upload the data to a block blob with index tags
_, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, &azblob.UploadBufferOptions{
Tags: map[string]string{
"key1": "value1",
"key2": "value2",
},
})
handleError(err)
}
使用設定選項上傳區塊 Blob
您可以在上傳 Blob 時定義用戶端程式庫設定選項。 這些選項也可進行調整,以改善效能、增強可靠性,並將成本最佳化。 下列程式碼範例示範如何定義上傳作業的設定選項。
指定用於上傳的資料傳輸選項
上傳 Blob 以將效能最佳化時,您可以設定設定選項。 下列設定選項可用於上傳作業:
BlockSize
:上傳區塊 Blob 時,每個區塊的大小。 預設值為 4 MB。Concurrency
:上傳期間要使用的平行連線數目上限。 預設值是 5。
使用下列方法上傳時,可以使用這些組態選項:
Upload 方法不支援這些選項,並在單一要求中上傳數據。
如需 Blob 儲存體傳輸大小限制的詳細資訊,請參閱調整 Blob 儲存體的目標。
下列程式碼範例示範如何使用 UploadFileOptions 來指定資料傳輸選項。 此範例中提供的值並非旨在作為建議。 若要正確調整這些值,您必須考慮應用程式的特定需求。
func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the data to a block blob with transfer options
_, err = client.UploadFile(context.TODO(), containerName, blobName, file,
&azblob.UploadFileOptions{
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 作業:
用戶端模組資源
另請參閱
相關內容
- 本文是適用於 Go 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 Go 應用程式的完整開發人員指南文章清單。