Aracılığıyla paylaş


Go ile blok blobu yükleme

Bu makalede, Go için Azure Depolama istemci modülü kullanılarak bir blobun nasıl karşıya yükleneceği gösterilmektedir. Bir dosya yolundan, akıştan, ikili nesneden veya metin dizesinden blok bloba veri yükleyebilirsiniz. Blobları dizin etiketleriyle de karşıya yükleyebilirsiniz.

Önkoşullar

Ortamınızı ayarlama

Mevcut bir projeniz yoksa, bu bölümde Go için Azure Blob Depolama istemci modülüyle çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Adımlar arasında modül yüklemesi, yol ekleme import ve yetkili istemci nesnesi oluşturma yer alır. Ayrıntılar için Azure Blob Depolama ve Go ile çalışmaya başlama bölümüne bakın.

Modülleri yükleme

Aşağıdaki komutu kullanarak azblob modülünü yükleyin:

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

Microsoft Entra Id ile kimlik doğrulaması yapmak için (önerilen), aşağıdaki komutu kullanarak modülü yükleyin azidentity :

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

İçeri aktarma yolları ekleme

Kod dosyanıza aşağıdaki içeri aktarma yollarını ekleyin:

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

Bu içeri aktarma yolları, başlamak için minimum gerekli olanı temsil eder. Bu makaledeki bazı kod örnekleri için ek içeri aktarma yolları gerekebilir. Belirli ayrıntılar ve örnek kullanım için bkz . Kod örnekleri.

İstemci nesnesi oluşturma

Bir uygulamayı Blob Depolama'ya bağlamak için azblob kullanarak bir istemci nesnesi oluşturun. NewClient. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:

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
}

Yetkilendirme

Blobu karşıya yüklemek için yetkilendirme mekanizmasının gerekli izinlere sahip olması gerekir. Microsoft Entra ID ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Veri Katkıcısı veya üzeri gerekir. Daha fazla bilgi edinmek için Put Blob (REST API) ve Put Block (REST API) yetkilendirme kılavuzuna bakın.

Blok bloba veri yükleme

Blobu karşıya yüklemek için istemci nesnesinden aşağıdaki yöntemlerden herhangi birini çağırın:

Karşıya yüklemeyi gerçekleştirmek için istemci kitaplığı ya Put Blob kullanabilir ya da bir dizi Put Block çağrısını ve ardından Put Block List çağrısını kullanabilir. Bu davranış, nesnenin genel boyutuna ve veri aktarımı seçeneklerinin nasıl ayarlandığına bağlıdır.

Not

Azure Depolama istemci kitaplıkları aynı bloba eş zamanlı yazmaları desteklemez. Uygulamanız aynı bloba birden çok işlem yazma gerektiriyorsa, öngörülebilir bir deneyim sağlamak için eşzamanlılık denetimine yönelik bir strateji uygulamanız gerekir. Eşzamanlılık stratejileri hakkında daha fazla bilgi edinmek için bkz. Blob Depolama'da eşzamanlılığı yönetme.

Yerel dosya yolundan blok blobu yükleme

Aşağıdaki örnek yerel bir dosyayı blok bloba yükler:

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)
}

Akıştan blok blobu yükleme

Aşağıdaki örnek, bir Reader örneği oluşturur ve dizeyi bir bayt akışı gibi okur. Akış daha sonra bir blok bloba yüklenir:

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)
}

İkili verileri blok bloba yükleme

Aşağıdaki örnek, ikili verileri bir blok bloba yükler:

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)
}

Blok blobu dizin etiketleriyle karşıya yükleyin

Aşağıdaki örnek, dizin etiketlerine sahip bir blok blob yükler.

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)
}

Yapılandırma seçenekleriyle bir blok blob yükleyin

Blob yükleme sırasında istemci kitaplığı yapılandırma seçeneklerini tanımlayabilirsiniz. Bu seçenekler performansı geliştirmek, güvenilirliği artırmak ve maliyetleri iyileştirmek için ayarlanabilir. Aşağıdaki kod örneklerde, karşıya yükleme işlemi için yapılandırma seçeneklerinin nasıl tanımlanacağı gösterilmektedir.

Karşıya yükleme için veri aktarımı seçeneklerini belirtme

Performansı iyileştirmek için blobu karşıya yüklerken yapılandırma seçeneklerini ayarlayabilirsiniz. Karşıya yükleme işlemleri için aşağıdaki yapılandırma seçenekleri kullanılabilir:

  • BlockSize: Blok blobu yüklerken her bir bloğun boyutu. Varsayılan değer 4 MB'tır.
  • Concurrency: Karşıya yükleme sırasında kullanılacak en fazla paralel bağlantı sayısı. Varsayılan değer 5'tir.

Bu yapılandırma seçenekleri, aşağıdaki yöntemler kullanılarak yükleme sırasında kullanılabilir.

Upload yöntemi bu seçenekleri desteklemez ve tek bir istekte verileri karşıya yükler.

Blob Depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için bkz. Blob Depolama için Ölçek Hedefleri.

Aşağıdaki kod örneğinde UploadFileOptions kullanılarak veri aktarımı seçeneklerinin nasıl belirtilmesi gösterilmektedir. Bu örnekte sağlanan değerler bir öneri olarak tasarlanmamıştır. Bu değerleri düzgün ayarlamak için uygulamanızın belirli gereksinimlerini dikkate almanız gerekir.

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)
}

Veri aktarımı seçeneklerini ayarlama hakkında daha fazla bilgi edinmek için Go ile karşıya yüklemeler ve indirmeler için performans ayarlaması başlıklı makaleye bakın.

Not

Bu kılavuzdaki kod örnekleri, Azure Blob Depolama ve Go ile çalışmaya başlamanıza yardımcı olmak için tasarlanmıştır. Hata işlemeyi ve Context değerleri uygulamanızın gereksinimlerini karşılayacak şekilde değiştirmeniz gerekir.

Kaynaklar

Go için Azure Blob Depolama istemci modülünü kullanarak blobları karşıya yükleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

Kod örnekleri

REST API işlemleri

Go için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Go paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blobları karşıya yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:

İstemci modülü kaynakları

Ayrıca bkz.

  • Bu makale, Go için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Go uygulamanızı geliştirin bölümündeki geliştirici kılavuzu makalelerinin tam listesine bakın.