Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan listázhatja a blobokat a Java Azure Storage ügyfélkódtárával.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Java Development Kit (JDK) 8-es vagy újabb verzió (a legjobb élmény érdekében a 17-es verziót javasoljuk)
- Ebben a példában az Apache Maven a projektkezeléshez használatos
Saját környezet beállítása
Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a Java Azure Blob Storage ügyfélkódtárával való együttműködésre. További információ: Az Azure Blob Storage és a Java használatának első lépései.
A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.
Megjegyzés
Ez a cikk a Maven buildelési eszközével hozza létre és futtatja a példakódot. Más buildelési eszközök, például a Gradle is együttműködnek a Java Azure SDK-val.
Csomagok telepítése
Nyissa meg a pom.xml fájlt a szövegszerkesztőben. Telepítse a csomagokat a BOM-fájl belefoglalásával, vagy egy közvetlen függőség megadásával.
Importálási utasítások hozzáadása
Adja hozzá a következő import-utasításokat:
import com.azure.core.http.rest.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
Engedélyezés
Az engedélyezési mechanizmusnak rendelkeznie kell a blobok listázásához szükséges engedélyekkel. A Microsoft Entra ID-val történő jogosultságkezeléshez (ajánlott) az Azure RBAC beépített Storage Blob Data Reader szerepköre vagy magasabb szintű szerepkör szükséges. További információkért tekintse meg a Blobok listázása (REST API) engedélyezési útmutatóját.
Ü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 a BlobServiceClientBuilder használatával BlobServiceClienthoz létre objektumotDefaultAzureCredential, és bemutatja, hogyan hozhat létre tároló- és blobügyfeleket, ha szükséges:
// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.windows.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
.getBlobContainerClient("<container-name>");
// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
.getBlobClient("<blob-name>");
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.
Tudnivalók a blobok listázási beállításairól
Ha blobokat listáz a kódból, megadhatja az eredmények Azure Storage-ból való visszaadására vonatkozó beállításokat. 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:
A visszaadott találatok számának kezelése
Alapértelmezés szerint egy listázási művelet egyszerre legfeljebb 5000 eredményt ad vissza, de megadhatja, hogy az egyes listázási műveletek hány eredményt adjanak vissza. A cikkben szereplő példák bemutatják, hogyan lehet az eredményeket oldalanként visszaadni. A lapozási fogalmakkal kapcsolatos további információkért lásd : Pagination with the Azure SDK for Java.
Eredmények szűrése előtaggal
A blobok listájának szűréséhez adjon meg egy sztringet paraméterként a prefix ListBlobsOptions.setPrefix(String prefix)-nek. 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.
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 blobokat nem a virtuális címtár rendezi.
Az alábbi példa a megadott tárolóban lévő blobokat sorolja fel egy egyszerű listaelem használatával:
public void listBlobsFlat(BlobContainerClient blobContainerClient) {
System.out.println("List blobs flat:");
blobContainerClient.listBlobs()
.forEach(blob -> System.out.printf("Name: %s%n", blob.getName()));
}
A mintakimenet a következőhöz hasonló:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
Megadhatod az eredmények szűrését vagy további információk megjelenítését is. Az alábbi példa egy megadott előtaggal rendelkező blobokat, valamint a törölt blobokat sorolja fel:
public void listBlobsFlatWithOptions(BlobContainerClient blobContainerClient) {
ListBlobsOptions options = new ListBlobsOptions()
.setMaxResultsPerPage(2) // Low number for demonstration purposes
.setDetails(new BlobListDetails()
.setRetrieveDeletedBlobs(true));
System.out.println("List blobs flat:");
int i = 0;
Iterable<PagedResponse<BlobItem>> blobPages = blobContainerClient.listBlobs(options, null).iterableByPage();
for (PagedResponse<BlobItem> page : blobPages) {
System.out.printf("Page %d%n", ++i);
page.getElements().forEach(blob -> {
System.out.printf("Name: %s, Is deleted? %b%n",
blob.getName(),
blob.isDeleted());
});
}
}
A mintakimenet a következőhöz hasonló:
List blobs flat:
Page 1
Name: file4.txt, Is deleted? false
Name: file5-deleted.txt, Is deleted? true
Page 2
Name: folderA/file1.txt, Is deleted? false
Name: folderA/file2.txt, Is deleted? false
Page 3
Name: folderA/folderB/file3.txt, Is deleted? false
Megjegyzés
A megjelenített mintakimenet feltételezi, hogy egy egyszerű névtérrel rendelkező tárfiókkal rendelkezik. Ha bekapcsolod a hierarchikus névtér funkciót a tárolófiókodhoz, a könyvtárak nem virtuálisak. Ehelyett konkrét, független tárgyak. 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 használja a következő módszert:
Az alábbi példa a megadott tárolóban lévő blobokat sorolja fel hierarchikus lista használatával:
public void listBlobsHierarchicalListing(BlobContainerClient blobContainerClient, String prefix/* ="" */) {
String delimiter = "/";
ListBlobsOptions options = new ListBlobsOptions()
.setPrefix(prefix);
blobContainerClient.listBlobsByHierarchy(delimiter, options, null)
.forEach(blob -> {
if (blob.isPrefix()) {
System.out.printf("Virtual directory prefix: %s%n", delimiter + blob.getName());
listBlobsHierarchicalListing(blobContainerClient, blob.getName());
} else {
System.out.printf("Blob name: %s%n", blob.getName());
}
});
}
A mintakimenet a következőhöz hasonló:
List blobs hierarchical:
Blob name: file4.txt
Virtual directory prefix: /folderA/
Blob name: folderA/file1.txt
Blob name: folderA/file2.txt
Virtual directory prefix: /folderA/folderB/
Blob name: folderA/folderB/file3.txt
Megjegyzés
A blob pillanatképek nem lehetnek felsorolva hierarchikus listázási műveletben.
Foltok listázása Apache Arrow formátumban (előzetes)
Important
A foltok Apache Arrow formátumban történő listázása jelenleg az ELŐNÉZETben van. Ehhez a forgatókönyvhöz a Azure Blob Storage klienskönyvtárának béta (előnézetes) verziója szükséges Java számára (például azure-storage-blob12.36.0-beta.1 vagy újabb előnézeti kiadás). Az előzetes verziójú funkciók szolgáltatásszintű szerződés nélkül érhetők el, és éles számítási feladatokhoz nem ajánlottak. Lehet, hogy bizonyos funkciók nem támogatottak, vagy korlátozott képességekkel rendelkeznek. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verzióhoz.
Ez a képesség a meglévő List Blobs API-ra épül. Az alapértelmezett XML helyett a kompakt, oszlopos Apache Arrow formátumot használja válaszformátumként a vezetéken. Engedélyezed, ha egyetlen opciót állítsz be a konténerlistázási híváson. A Java SDK a háttérben dekódolja az Apache Arrow-t, és ugyanazokat az objektumokat adja visszaBlobItem. Ez a megközelítés javítja a listázás áteresztőképességét, és csökkenti az ügyféloldali CPU-t nagy konténerek felsorolásakor. Megőrzi azt a válaszszerződést, amelyre a jelentkezések támaszkodnak.
Warning
A blobok listázása Apache Arrow formátumban nem támogatott olyan tárolófiókokon, amelyeknek hierarchikus névtér (Azure Data Lake Storage) van engedélyezve.
Az Apache Arrow-formázott eredmények kéréséhez állítsd be a válaszserializációs formátumot a ListBlobsOptions menüpontján StorageResponseSerializationFormat.ARROW formátumra a setStorageResponseSerializationFormathívással , majd továbbítsuk az opciókat a BlobContainerClient.listBlobs nevű szervernek. Apache Arrow kimenet használatakor a setEndBefore és setStartFrom elemeket is meghívhatod, hogy vezéreld a visszaadott útvonalak tartományát.
Az alábbi példa felsorolja a konténerben lévő foltokat, és az eredményeket Apache Arrow formátumban kéri:
ListBlobsOptions options = new ListBlobsOptions()
.setPrefix("folderA/")
.setStorageResponseSerializationFormat(StorageResponseSerializationFormat.ARROW);
for (BlobItem blobItem : containerClient.listBlobs(options, null)) {
System.out.println("Blob name: " + blobItem.getName());
}
Források
Ha többet szeretne megtudni arról, hogyan listázhatók a blobok az Azure Blob Storage Javahoz készült ügyféloldali kódtárával, tekintse meg a következő forrásokat.
Kódminták
REST API-műveletek
Az Azure SDK for Java könyvtárakat tartalmaz, amelyek az Azure REST API-ra épülnek. Ezeknek a könyvtáraknak a használatával a REST API műveleteket is felhasználhatod a jól ismert Java 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 Java Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a Java-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.