Go ile blobları listeleme
Bu makalede Go için Azure Depolama istemci modülünü kullanarak blobları listeleme adımları gösterilmektedir.
Ö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 (önerilen), Azure RBAC yerleşik rolü Depolama Blob Veri Okuyucusu veya üzeri gerekir. Daha fazla bilgi edinmek için Bkz. Liste Blobları (REST API) için yetkilendirme kılavuzu.
Blob listeleme seçenekleri hakkında
Kodunuzdan blobları listelediğinizde, Sonuçların Azure Depolama'dan nasıl döndürüleceğini yönetmek için birçok seçenek belirtebilirsiniz. Her sonuç kümesinde döndürülecek sonuç sayısını belirtebilir ve ardından sonraki kümeleri alabilirsiniz. Adları bu karakter veya dizeyle başlayan blobları döndürmek için bir ön ek belirtebilirsiniz. Ayrıca blobları düz listeleme yapısında veya hiyerarşik olarak listeleyebilirsiniz. Hiyerarşik liste, blobları klasörler halinde düzenlenmiş gibi döndürür.
Düz liste kullanarak kapsayıcıdaki blobları listelemek için aşağıdaki yöntemi çağırın:
Hiyerarşik liste kullanarak bir kapsayıcıdaki blobları listelemek için, kapsayıcı istemci nesnesinden aşağıdaki yöntemi çağırın:
Kaç sonuç döndürülür yönetme
Varsayılan olarak, bir listeleme işlemi aynı anda en fazla 5000 sonuç döndürür. Daha küçük bir sonuç kümesi döndürmek için ListBlobsFlatOptions veya ListBlobsHierarchyOptions içindeki alan için MaxResults
sıfır olmayan bir değer sağlayın.
Sonuçları ön ek ile filtreleme
Döndürülen blobların listesini filtrelemek için ListBlobsFlatOptions veya ListBlobsHierarchyOptions içindeki alan için Prefix
bir dize veya karakter belirtin. Ön ek dizesi bir veya daha fazla karakter içerebilir. Azure Depolama daha sonra yalnızca adları bu ön ek ile başlayan blobları döndürür.
Blob meta verilerini veya diğer bilgileri ekleme
Sonuçlara blob meta verilerini eklemek için alanı ListBlobsInclude öğesinin bir parçası olarak ayarlayınMetadata
.true
Azure Depolama, döndürülen her blob ile meta veriler içerdiğinden blob meta verilerini ayrı olarak getirmeniz gerekmez.
Anlık görüntüleri, sürümleri, blob dizin etiketlerini ve sonuçlarla birlikte diğer bilgileri içeren ek seçenekler için bkz . ListBlobsInclude .
Düz listeleme ve hiyerarşik listeleme karşılaştırması
Azure Depolama'daki bloblar hiyerarşik paradigma (klasik dosya sistemi gibi) yerine düz bir paradigma içinde düzenlenir. Ancak, bir klasör yapısını taklit etmek için blobları sanal dizinler halinde düzenleyebilirsiniz. Sanal dizin, blob adının bir bölümünü oluşturur ve sınırlayıcı karakteriyle gösterilir.
Blobları sanal dizinler halinde düzenlemek için blob adında bir sınırlayıcı karakteri kullanın. Varsayılan sınırlayıcı karakteri eğik çizgidir (/) ancak sınırlayıcı olarak herhangi bir karakteri belirtebilirsiniz.
Bloblarınızı sınırlayıcı kullanarak adlandırıyorsanız, blobları hiyerarşik olarak listelemeyi seçebilirsiniz. Hiyerarşik listeleme işlemi için Azure Depolama, üst nesnenin altındaki tüm sanal dizinleri ve blobları döndürür. Hiyerarşide geçiş yapmak için listeleme işlemini yinelemeli olarak çağırabilirsiniz. Örneğin, klasik dosya sisteminde program aracılığıyla geçiş yapabilirsiniz.
Not
Blob anlık görüntüleri hiyerarşik listeleme işleminde listelenemez.
Düz liste kullanma
Varsayılan olarak, listeleme işlemi düz bir listede bloblar döndürür. Düz bir listede bloblar sanal dizine göre düzenlenemez.
Aşağıdaki örnekte, belirtilen kapsayıcıdaki bloblar düz liste kullanılarak listelenmektedir. Bu örnek, varsa blob anlık görüntülerini ve blob sürümlerini içerir:
func listBlobsFlat(client *azblob.Client, containerName string) {
// List the blobs in the container
pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
Include: azblob.ListBlobsInclude{Snapshots: true, Versions: true},
})
fmt.Println("List blobs flat:")
for pager.More() {
resp, err := pager.NextPage(context.TODO())
handleError(err)
for _, blob := range resp.Segment.BlobItems {
fmt.Println(*blob.Name)
}
}
}
Örnek çıktı şuna benzer:
List blobs flat:
file4.txt
folderA/file1.txt
folderA/file2.txt
folderA/folderB/file3.txt
Aşağıdaki örnekte, belirli bir ön ek ile başlayan bir kapsayıcıdaki bloblar listelenir:
func listBlobsFlatOptions(client *azblob.Client, containerName string, prefix string) {
// List the blobs in the container with a prefix
pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
Prefix: to.Ptr(prefix),
})
fmt.Println("List blobs with prefix:")
for pager.More() {
resp, err := pager.NextPage(context.TODO())
handleError(err)
for _, blob := range resp.Segment.BlobItems {
fmt.Println(*blob.Name)
}
}
}
"sample" ön ek dizesini geçirirken, çıkış şuna benzer:
List blobs with prefix:
sample-blob1.txt
sample-blob2.txt
sample-blob3.txt
Not
Gösterilen örnek çıktı, düz ad alanına sahip bir depolama hesabınız olduğunu varsayar. Depolama hesabınız için hiyerarşik ad alanı özelliğini etkinleştirdiyseniz, dizinler sanal değildir. Bunun yerine, bunlar somut, bağımsız nesnelerdir. Sonuç olarak, dizinler listede sıfır uzunlukta bloblar olarak görünür.
Hiyerarşik ad alanıyla çalışırken alternatif bir listeleme seçeneği için bkz . NewListPathsPager.
Hiyerarşik liste kullanma
Listeleme işlemini hiyerarşik olarak çağırdığınızda, Azure Depolama hiyerarşinin ilk düzeyindeki sanal dizinleri ve blobları döndürür.
Blobları hiyerarşik olarak listelemek için aşağıdaki yöntemi kullanın:
Aşağıdaki örnek, hiyerarşik bir liste kullanarak belirtilen kapsayıcıdaki blobları listeler. Bu örnekte, kapsayıcıdaki tüm blobları listelemek için ön ek parametresi başlangıçta boş bir dizeye ayarlanır. Örnek daha sonra sanal dizin hiyerarşisi ve liste blobları arasında geçiş yapmak için listeleme işlemini yinelemeli olarak çağırır.
func listBlobsHierarchy(client *azblob.Client, containerName string, prefix string) {
// Reference the container as a client object
containerClient := client.ServiceClient().NewContainerClient(containerName)
pager := containerClient.NewListBlobsHierarchyPager("/", &container.ListBlobsHierarchyOptions{
Prefix: to.Ptr(prefix),
MaxResults: to.Ptr(int32(1)), // MaxResults set to 1 for demonstration purposes
})
for pager.More() {
resp, err := pager.NextPage(context.TODO())
handleError(err)
if resp.Segment.BlobPrefixes != nil {
for _, prefix := range resp.Segment.BlobPrefixes {
fmt.Println("Virtual directory prefix:", *prefix.Name)
// Recursively list blobs in the prefix
listBlobsHierarchy(client, containerName, *prefix.Name)
}
}
for _, blob := range resp.Segment.BlobItems {
fmt.Println("Blob:", *blob.Name)
}
}
}
Örnek çıktı şuna benzer:
Virtual directory prefix: folderA/
Blob: folderA/file1.txt
Blob: folderA/file2.txt
Blob: folderA/file3.txt
Virtual directory prefix: folderA/folderB/
Blob: folderA/folderB/file1.txt
Blob: folderA/folderB/file2.txt
Blob: folderA/folderB/file3.txt
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ı listeleme 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ı listelemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:
- Blobları Listeleme (REST API)
İstemci modülü kaynakları
Ayrıca bkz.
İ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.