Megosztás a következőn keresztül:


Blobok listázása .NET-tel

Ez a cikk bemutatja, hogyan listázhatja a blobokat a .NET-hez készült Azure Storage-ügyfélkódtár használatával.

Előfeltételek

Saját környezet beállítása

Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be projektet a .NET-hez készült Azure Blob Storage ügyfélkódtár használatához. A lépések közé tartozik a csomagtelepítés, az irányelvek hozzáadása using és egy engedélyezett ügyfélobjektum létrehozása. További részletekért tekintse meg az Azure Blob Storage és a .NET használatának első lépéseit.

Csomagok telepítése

A projektkönyvtárból telepítse az Azure Blob Storage- és Az Azure Identity-ügyfélkódtárak csomagjait a dotnet add package paranccsal. Az Azure.Identity-csomagra az Azure-szolgáltatásokhoz való jelszó nélküli kapcsolatokhoz van szükség.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Irányelvek hozzáadása using

Adja hozzá ezeket az using irányelveket a kódfájl elejéhez:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

A cikkben szereplő néhány példakód további using irányelveket igényelhet.

Ügyfélobjektum létrehozása

Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt. Az alábbi példa bemutatja, hogyan hozhat létre ügyfélobjektumot DefaultAzureCredential engedélyezés céljából:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

A szolgáltatásügyfél regisztrálható a függőséginjektáláshoz egy .NET-alkalmazásban.

Ügyfélobjektumokat is létrehozhat adott tárolókhoz vagy blobokhoz. Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.

Engedélyezés

Az engedélyezési mechanizmusnak rendelkeznie kell a blobok listázásához szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített storage-blobadat-olvasó vagy újabb szerepkörre van szüksége. További információkért tekintse meg a Blobok listázása (REST API) engedélyezési útmutatóját.

Tudnivalók a bloblista beállításairól

Ha blobokat listáz a kódból, több lehetőséget is megadhat az eredmények Azure Storage-ból való visszaadásának kezelésére. Megadhatja az egyes találathalmazokban visszaadandó eredmények számát, majd lekérheti a következő halmazokat. Megadhat egy előtagot, amely visszaadja azokat a blobokat, amelyeknek a neve ezzel a karakterrel vagy sztringgel kezdődik. A blobokat egy lapos listaszerkezetben vagy hierarchikusan is listázhatja. A hierarchikus lista a blobokat úgy adja vissza, mintha mappákba rendezték volna őket.

A tárfiókban lévő blobok listázásához hívja meg az alábbi módszerek egyikét:

Az eredmény visszaadott értékének kezelése

Alapértelmezés szerint egy listaelem-művelet egyszerre legfeljebb 5000 eredményt ad vissza, de megadhatja, hogy hány találatot szeretne visszaadni az egyes listaműveleteknek. A cikkben bemutatott példák bemutatják, hogyan adhat vissza eredményeket a lapokban. A lapozási fogalmakkal kapcsolatos további információkért lásd : Pagination with the Azure SDK for .NET.

Eredmények szűrése előtaggal

A blobok listájának szűréséhez adjon meg egy sztringet a prefix paraméterhez. Az előtag sztringje egy vagy több karaktert tartalmazhat. Az Azure Storage ezután csak azokat a blobokat adja vissza, amelyeknek a neve ezzel az előtaggal kezdődik.

Metaadatok visszaadva

A blob metaadatait az eredményekkel együtt a BlobTraits enumerálás Metaadat értékének megadásával adhatja vissza.

Egybesimított lista és hierarchikus lista

Az Azure Storage-blobok hierarchikus paradigma helyett egy lapos paradigma szerint vannak rendszerezve (például egy klasszikus fájlrendszerben). A blobokat azonban virtuális könyvtárakba rendezheti a mappastruktúra utánzásához. A virtuális címtár a blob nevének része, és a határoló karakter jelzi.

A blobok virtuális könyvtárakba rendezéséhez használjon elválasztó karaktert a blob nevében. Az alapértelmezett elválasztó karakter egy perjel (/), de bármely karaktert megadhat elválasztóként.

Ha elválasztójel használatával nevezi el a blobokat, választhatja, hogy hierarchikusan listázni szeretné a blobokat. Hierarchikus listázási művelet esetén az Azure Storage visszaadja a szülőobjektum alatti virtuális könyvtárakat és blobokat. A listázási műveletet rekurzívan hívhatja meg a hierarchia átjárásához, hasonlóan ahhoz, ahogyan egy klasszikus fájlrendszert programozott módon léptetne át.

Egyszerű lista használata

A listázási művelet alapértelmezés szerint egy egyszerű lista blobjait adja vissza. Egy egyszerű lista esetében a blobok nem virtuális címtárak szerint vannak rendszerezve.

Az alábbi példa a megadott tárolóban lévő blobokat listázza egy egyszerű listaelem használatával, egy választható szegmensmérettel, és a blob nevét egy konzolablakba írja.

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

A mintakimenet a következőhöz hasonló:

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

Feljegyzés

A megjelenített mintakimenet feltételezi, hogy egy egyszerű névtérrel rendelkező tárfiókkal rendelkezik. Ha engedélyezte a tárfiók hierarchikus névtér funkcióját, a címtárak nem virtuálisak. Ehelyett konkrét, független objektumok. Ennek eredményeképpen a címtárak nulla hosszúságú blobként jelennek meg a listában.

A hierarchikus névtér használatakor alternatív listabeállítást a címtár tartalmának listázása (Azure Data Lake Storage Gen2) című témakörben talál.

Hierarchikus lista használata

Ha hierarchikusan meghív egy listázási műveletet, az Azure Storage a hierarchia első szintjén adja vissza a virtuális könyvtárakat és blobokat.

A blobok hierarchikus listázásához hívja meg a BlobContainerClient.GetBlobsByHierarchy vagy a BlobContainerClient.GetBlobsByHierarchyAsync metódust.

Az alábbi példa egy hierarchikus listaelem használatával sorolja fel a megadott tárolóban lévő blobokat egy választható szegmensmérettel, és beírja a blob nevét a konzolablakba.

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

A mintakimenet a következőhöz hasonló:

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

Feljegyzés

A blob-pillanatképek nem szerepelhetnek hierarchikus listaelem-műveletben.

Blobverziók vagy pillanatképek listázása

Blobverziók vagy pillanatképek listázásához adja meg a BlobStates paramétert a Verzió vagy a Pillanatkép mezővel. A verziók és pillanatképek a legrégebbitől a legújabbig jelennek meg.

Az alábbi példakód bemutatja, hogyan listázhatja a blobverziókat.

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

Források

Ha többet szeretne megtudni arról, hogyan listázhatja a blobokat az Azure Blob Storage .NET-hez készült ügyfélkódtárával, tekintse meg az alábbi erőforrásokat.

REST API-műveletek

A .NET-hez készült Azure SDK olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát ismerős .NET-paradigmákon keresztül. A blobok felsorolására szolgáló ügyfélkódtár-metódusok a következő REST API-műveletet használják:

Ügyfélkódtár erőforrásai

Lásd még