Go ile blok blobu yükleme
Bu makalede Go için Azure Depolama istemci modülünü kullanarak bir blobu karşıya yükleme işlemi 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
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- Go 1.18+
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 bkz. Azure Blob Depolama kullanmaya başlama ve Git.
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 gereken en düşük değeri 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
Yetkilendirme mekanizması, blobu karşıya yüklemek için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verileri Katkıda Bulunanı 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ığı Put Blob veya bir dizi Put Block çağrısını ve ardından Put Block List
öğesini kullanabilir. Bu davranış, nesnenin genel boyutuna ve veri aktarımı seçeneklerinin nasıl ayarlandığına bağlıdır.
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
örnek oluşturur ve dizeden bayt akışıymış 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)
}
Dizin etiketleriyle blok blobu karşıya yükleme
Aşağıdaki örnek, dizin etiketlerine sahip bir blok blobunu karşıya 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 blok blobu karşıya yükleme
Blobu karşıya yüklerken 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 karşıya yüklenirken her 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 karşıya yüklenirken 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 hedefleri ölçeklendirme.
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 bkz . Go ile karşıya yüklemeler ve indirmeler için performans ayarlama.
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
- Bu makaledeki kod örneklerini görüntüleyin (GitHub)
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.
- Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma
- Azure Blob Depolama verileri yönetmek ve bulmak için blob dizini etiketlerini kullanma
İlgili içerik
- 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ı derleme makalelerinde geliştirici kılavuzu makalelerinin tam listesine bakın.