共用方式為


使用 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,請參閱下列資源。

程式碼範例

REST API 操作

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

用戶端模組資源

另請參閱

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