.NET ile blobları listeleme

Bu makalede . .NET için Azure Depolama istemci kitaplığını kullanarak blobları listeleme adımları gösterilmektedir.

Önkoşullar

  • Bu makalede, .NET için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, yönerge ekleme using ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Blob Depolama ve .NET ile çalışmaya başlama.
  • Yetkilendirme mekanizmasının blobları listeleme izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemi için yetkilendirme kılavuzuna bakın:

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 dizi 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.

Depolama hesabındaki blobları listelemek için şu yöntemlerden birini ç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, ancak her listeleme işleminin döndürmesini istediğiniz sonuç sayısını belirtebilirsiniz. Bu makalede sunulan örneklerde, sonuçları sayfalarda nasıl döndürebileceğiniz gösterilir. Sayfalandırma kavramları hakkında daha fazla bilgi edinmek için bkz. .NET için Azure SDK ile sayfalandırma.

Sonuçları ön ek ile filtreleme

Blob listesini filtrelemek için parametresi için prefix bir dize belirtin. Ön ek dizesi bir veya daha fazla karakter içerebilir. Ardından Azure Depolama yalnızca adları bu ön ek ile başlayan blobları döndürür.

Meta verileri döndürme

BlobTraits sabit listesi için Meta Veri değerini belirterek sonuçları içeren blob meta verilerini döndürebilirsiniz.

Düz listeleme ile hiyerarşik listeleme karşılaştırması

Azure Depolama'daki bloblar hiyerarşik paradigma (klasik dosya sistemi gibi) yerine düz paradigma halinde 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.

Bir sınırlayıcı kullanarak bloblarınızı 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. Klasik bir dosya sisteminde program aracılığıyla geçiş yaptığınıza benzer şekilde hiyerarşide gezinmek için listeleme işlemini yinelemeli olarak çağırabilirsiniz.

Düz liste kullanma

Varsayılan olarak, listeleme işlemi düz bir dökümdeki blobları döndürür. Düz bir listede bloblar sanal dizine göre düzenlenmez.

Aşağıdaki örnek, belirtilen kapsayıcıdaki blobları isteğe bağlı kesim boyutu belirtilen düz bir liste kullanarak listeler ve blob adını bir konsol penceresine yazar.

private static async Task ListBlobsFlatListing(BlobContainerClient blobContainerClient, 
                                               int? segmentSize)
{
    try
    {
        // Call the listing operation and return pages of the specified size.
        var resultSegment = blobContainerClient.GetBlobsAsync()
            .AsPages(default, segmentSize);

        // Enumerate the blobs returned for each page.
        await foreach (Page<BlobItem> blobPage in resultSegment)
        {
            foreach (BlobItem blobItem in blobPage.Values)
            {
                Console.WriteLine("Blob name: {0}", blobItem.Name);
            }

            Console.WriteLine();
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Örnek çıktı şuna benzer:

Blob name: FolderA/blob1.txt
Blob name: FolderA/blob2.txt
Blob name: FolderA/blob3.txt
Blob name: FolderA/FolderB/blob1.txt
Blob name: FolderA/FolderB/blob2.txt
Blob name: FolderA/FolderB/blob3.txt
Blob name: FolderA/FolderB/FolderC/blob1.txt
Blob name: FolderA/FolderB/FolderC/blob2.txt
Blob name: FolderA/FolderB/FolderC/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 uzunluklu bloblar olarak görünür.

Hiyerarşik ad alanıyla çalışırken alternatif bir listeleme seçeneği için bkz. Dizin içeriğini listeleme (Azure Data Lake Storage 2. Nesil).

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 BlobContainerClient.GetBlobsByHierarchy veya BlobContainerClient.GetBlobsByHierarchyAsync yöntemini çağırın.

Aşağıdaki örnek, belirtilen kapsayıcıdaki blobları isteğe bağlı bir kesim boyutu belirtilen hiyerarşik bir liste kullanarak listeler ve blob adını konsol penceresine yazar.

private static async Task ListBlobsHierarchicalListing(BlobContainerClient container, 
                                                       string prefix, 
                                                       int? segmentSize)
{
    try
    {
        // Call the listing operation and return pages of the specified size.
        var resultSegment = container.GetBlobsByHierarchyAsync(prefix:prefix, delimiter:"/")
            .AsPages(default, segmentSize);

        // Enumerate the blobs returned for each page.
        await foreach (Page<BlobHierarchyItem> blobPage in resultSegment)
        {
            // A hierarchical listing may return both virtual directories and blobs.
            foreach (BlobHierarchyItem blobhierarchyItem in blobPage.Values)
            {
                if (blobhierarchyItem.IsPrefix)
                {
                    // Write out the prefix of the virtual directory.
                    Console.WriteLine("Virtual directory prefix: {0}", blobhierarchyItem.Prefix);

                    // Call recursively with the prefix to traverse the virtual directory.
                    await ListBlobsHierarchicalListing(container, blobhierarchyItem.Prefix, null);
                }
                else
                {
                    // Write out the name of the blob.
                    Console.WriteLine("Blob name: {0}", blobhierarchyItem.Blob.Name);
                }
            }

            Console.WriteLine();
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Örnek çıktı şuna benzer:

Virtual directory prefix: FolderA/
Blob name: FolderA/blob1.txt
Blob name: FolderA/blob2.txt
Blob name: FolderA/blob3.txt

Virtual directory prefix: FolderA/FolderB/
Blob name: FolderA/FolderB/blob1.txt
Blob name: FolderA/FolderB/blob2.txt
Blob name: FolderA/FolderB/blob3.txt

Virtual directory prefix: FolderA/FolderB/FolderC/
Blob name: FolderA/FolderB/FolderC/blob1.txt
Blob name: FolderA/FolderB/FolderC/blob2.txt
Blob name: FolderA/FolderB/FolderC/blob3.txt

Not

Blob anlık görüntüleri hiyerarşik listeleme işleminde listelenemez.

Blob sürümlerini veya anlık görüntülerini listeleme

Blob sürümlerini veya anlık görüntüleri listelemek için, Sürüm veya Anlık Görüntü alanıyla BlobStates parametresini belirtin. Sürümler ve anlık görüntüler en eskiden en yeniye listelenir.

Aşağıdaki kod örneğinde blob sürümlerini listeleme gösterilmektedir.

private static void ListBlobVersions(BlobContainerClient blobContainerClient, 
                                           string blobName)
{
    try
    {
        // Call the listing operation, specifying that blob versions are returned.
        // Use the blob name as the prefix. 
        var blobVersions = blobContainerClient.GetBlobs
            (BlobTraits.None, BlobStates.Version, prefix: blobName)
            .OrderByDescending(version => version.VersionId).Where(blob => blob.Name == blobName);

        // Construct the URI for each blob version.
        foreach (var version in blobVersions)
        {
            BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blobContainerClient.Uri)
            {
                BlobName = version.Name,
                VersionId = version.VersionId
            };

            if ((bool)version.IsLatestVersion.GetValueOrDefault())
            {
                Console.WriteLine("Current version: {0}", blobUriBuilder);
            }
            else
            {
                Console.WriteLine("Previous version: {0}", blobUriBuilder);
            }
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Kaynaklar

.NET için Azure Blob Depolama istemci kitaplığını kullanarak blobları listeleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

REST API işlemleri

.NET için Azure SDK, Azure REST API'sinin üzerine inşa edilerek rest API işlemleriyle alıştığınız .NET paradigmalarıyla etkileşim kurmanızı sağlayan kitaplıklar içerir. Blobları listelemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:

İstemci kitaplığı kaynakları

Ayrıca bkz.