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

  • Ez a cikk feltételezi, hogy már van beállítva egy projekt, amely a .NET Azure Blob Storage ügyfélkódtárával működik. A projekt beállításáról, beleértve a csomagtelepítést, az irányelvek hozzáadását using és az engedélyezett ügyfélobjektumok létrehozását, olvassa el az Első lépések a Azure Blob Storage és a .NET használatával című témakört.
  • Az engedélyezési mechanizmusnak engedélyekkel kell rendelkeznie a blobok listázásához. További információért tekintse meg az alábbi REST API-művelet engedélyezési útmutatóját:

Tudnivalók a blobok listázási lehetőségeirő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 eredményhalmazokban visszaadandó eredmények számát, majd lekérheti a következő halmazokat. Megadhat egy előtagot azoknak a bloboknak a visszaadásához, amelyeknek a neve ezzel a karakterrel vagy sztringgel kezdődik. A blobokat pedig egy egybesimított 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:

A visszaadott eredmények számát kezelheti

Alapértelmezés szerint egy listaelem-művelet legfeljebb 5000 eredményt ad vissza egyszerre, de megadhatja, hogy az egyes listaelemekre vonatkozó műveletek hány eredményt adjanak vissza. A cikkben bemutatott példák bemutatják, hogyan adhat vissza eredményeket az oldalakon. További információ a lapozási fogalmakról: Lapozás a .NET-hez készült Azure SDK-val.

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-sztring 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

Az eredményekkel rendelkező blob metaadatait a BlobTraits enumerálás Metaadat értékének megadásával adhatja meg.

Egybesimított listaelem és hierarchikus listaelem

Az Azure Storage-ban a blobok hierarchikus paradigma helyett egy egybesimított paradigmában vannak rendszerezve (például egy klasszikus fájlrendszerben). A blobokat azonban virtuális könyvtárakba rendezheti a mappaszerkezet utánzásához. A virtuális könyvtár a blob nevének része, és az elválasztó karakter jelöli.

Ha a blobokat virtuális könyvtárakba szeretné rendezni, használjon elválasztó karaktert a blob nevében. Az alapértelmezett elválasztó karakter perjel (/), de bármilyen karaktert megadhat elválasztóként.

Ha elválasztó karakterrel nevezi el a blobokat, választhatja a blobok hierarchikus listázását. Hierarchikus listázási művelet esetén az Azure Storage a szülőobjektum alatti virtuális könyvtárakat és blobokat adja vissza. A listázási műveletet rekurzív módon hívhatja meg a hierarchia bejárásához, hasonlóan ahhoz, ahogyan a klasszikus fájlrendszert programozott módon járná be.

Egybesimított lista használata

Alapértelmezés szerint a listázási művelet egy egybesimított lista blobokat ad vissza. Egy egybesimított lista esetén a blobok nem virtuális könyvtár szerint vannak rendszerezve.

Az alábbi példa a megadott tárolóban lévő blobokat listázza egy egybesimított listaelem használatával, opcionális 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

Megjegyzés

A megjelenített mintakimenet feltételezi, hogy egy egybesimított 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ént a címtárak nulla hosszúságú blobként jelennek meg a listában.

A hierarchikus névtér használatakor alternatív listaelem-beállításért lásd: Címtártartalom listázása (Azure Data Lake Storage Gen2).

Hierarchikus listaelem használata

Ha hierarchikusan hív meg 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 listázza a megadott tárolóban lévő blobokat egy opcionális 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

Megjegyzés

A blobpillanatképek nem listázhatók hierarchikus listázási műveletekben.

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

A 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

A blobok .NET-hez készült Azure Blob Storage-ügyfélkódtár használatával történő listázásával kapcsolatos további információkért tekintse meg az alábbi forrásanyagokat.

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 a jól ismert .NET-paradigmákon keresztül. A blobok listázásakor használt ü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