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:
- BlobContainerClient.GetBlobs
- BlobContainerClient.GetBlobsAsync
- BlobContainerClient.GetBlobsByHierarchy
- BlobContainerClient.GetBlobsByHierarchyAsync
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:
- Blobok listázása (REST API)