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
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Az operációs rendszer legújabb .NET SDK-ja . Mindenképpen szerezze be az SDK-t, és ne a futtatókörnyezetet.
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:
- BlobContainerClient.GetBlobs
- BlobContainerClient.GetBlobsAsync
- BlobContainerClient.GetBlobsByHierarchy
- BlobContainerClient.GetBlobsByHierarchyAsync
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ártartalom listázása (Azure Data Lake Storage) 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:
- Blobok listázása (REST API)
Ügyfélkódtár erőforrásai
Lásd még
Kapcsolódó tartalom
- Ez a cikk a .NET-hez készült Blob Storage fejlesztői útmutató része. További információért tekintse meg a .NET-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.