Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u blobs kunt vermelden met de Azure Storage-clientbibliotheek voor Java.
Vereisten
- Azure-abonnement: u kunt een gratis abonnement nemen
- Azure Storage-account: maak een opslagaccount
- Java Development Kit (JDK) versie 8 of hoger (we raden versie 17 aan voor de beste ervaring)
- Apache Maven wordt in dit voorbeeld gebruikt voor projectbeheer
Uw omgeving instellen
Als u geen bestaand project hebt, ziet u in deze sectie hoe u een project instelt voor gebruik met de Azure Blob Storage-clientbibliotheek voor Java. Zie Aan de slag met Azure Blob Storage en Java voor meer informatie.
Als u wilt werken met de codevoorbeelden in dit artikel, volgt u deze stappen om uw project in te stellen.
Notitie
In dit artikel wordt het Maven-buildhulpprogramma gebruikt om de voorbeeldcode te bouwen en uit te voeren. Andere buildhulpprogramma's, zoals Gradle, werken ook met de Azure SDK voor Java.
Pakketten installeren
Open het pom.xml bestand in de teksteditor. Installeer de pakketten door het BOM-bestand op te nemen of een directe afhankelijkheid op te nemen.
Importverklaringen toevoegen
Voeg de volgende import instructies toe:
import com.azure.core.http.rest.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
Autorisatie
Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om een blob weer te geven. Voor autorisatie met Microsoft Entra ID (aanbevolen) heb je de ingebouwde rol Storage Blob Data Reader of hoger in Azure RBAC nodig. Zie de autorisatierichtlijnen voor List Blobs (REST API) voor meer informatie.
Een clientobject maken
Als u een app wilt verbinden met Blob Storage, maakt u een exemplaar van BlobServiceClient.
In het volgende voorbeeld wordt BlobServiceClientBuilder gebruikt om een BlobServiceClient object te bouwen met behulp vanDefaultAzureCredential, en ziet u hoe u indien nodig container- en blobclients maakt:
// 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>");
Zie Clientobjecten maken en beheren die interactie hebben met gegevensbronnen voor meer informatie over het maken en beheren van clientobjecten.
Over mogelijkheden voor het weergeven van blobs
Wanneer u blobs uit uw code opgeeft, kunt u opties opgeven om te beheren hoe resultaten worden geretourneerd vanuit Azure Storage. U kunt het aantal resultaten opgeven dat moet worden geretourneerd in elke set resultaten en vervolgens de volgende sets ophalen. U kunt een voorvoegsel opgeven om blobs te retourneren waarvan de namen beginnen met dat teken of die tekenreeks. En u kunt blobs in een platte lijststructuur of hiërarchisch weergeven. Een hiërarchische vermelding retourneert blobs alsof ze zijn ingedeeld in mappen.
Als u de blobs in een opslagaccount wilt weergeven, roept u een van de volgende methoden aan:
Beheren hoeveel resultaten worden geretourneerd
Standaard retourneert een vermeldingsbewerking maximaal 5000 resultaten tegelijk, maar u kunt het aantal resultaten opgeven dat elke vermeldingsbewerking moet retourneren. De voorbeelden in dit artikel laten zien hoe u resultaten op pagina's kunt retourneren. Zie Paginering met de Azure SDK voor Java voor meer informatie over pagineringsconcepten.
Resultaten filteren met een voorvoegsel
Als u de lijst met blobs wilt filteren, geeft u een tekenreeks door als parameter prefix aan ListBlobsOptions.setPrefix(tekenreeksvoorvoegsel). De tekenreeks voor het voorvoegsel kan een of meer tekens bevatten. Azure Storage retourneert vervolgens alleen de blobs waarvan de namen beginnen met dat voorvoegsel.
Platte lijstweergave versus hiërarchische lijstweergave
Blobs in Azure Storage zijn ingedeeld in een plat paradigma in plaats van een hiërarchisch paradigma (zoals een klassiek bestandssysteem). U kunt blobs echter in virtuele mappen ordenen om een mapstructuur na te bootsen. Een virtuele map maakt deel uit van de naam van de blob en wordt aangegeven door het scheidingsteken.
Als u blobs wilt ordenen in virtuele mappen, gebruikt u een scheidingsteken in de blobnaam. Het standaard scheidingsteken is een schuine streep (/), maar u kunt elk teken als scheidingsteken specificeren.
Als u de naam van uw blobs opgeeft met behulp van een scheidingsteken, kunt u ervoor kiezen om blobs hiërarchisch weer te geven. Voor een hiërarchische vermeldingsbewerking retourneert Azure Storage alle virtuele mappen en blobs onder het bovenliggende object. U kunt de vermeldingsbewerking recursief aanroepen om de hiërarchie te doorlopen, vergelijkbaar met de manier waarop u een klassiek bestandssysteem programmatisch zou doorlopen.
Een platte lijst gebruiken
Standaard retourneert een lijstopdracht blobs in een platte lijst. In een platte overzicht worden blobs niet geordend op virtuele map.
In het volgende voorbeeld worden de blobs in de opgegeven container vermeld met behulp van een platte vermelding:
public void listBlobsFlat(BlobContainerClient blobContainerClient) {
System.out.println("List blobs flat:");
blobContainerClient.listBlobs()
.forEach(blob -> System.out.printf("Name: %s%n", blob.getName()));
}
Voorbeelduitvoer is vergelijkbaar met:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
Je kunt ook opties instellen om lijstresultaten te filteren of meer informatie te tonen. In het volgende voorbeeld worden blobs met een opgegeven voorvoegsel vermeld en worden ook verwijderde blobs weergegeven:
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());
});
}
}
Voorbeelduitvoer is vergelijkbaar met:
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
Notitie
In de voorbeelduitvoer wordt ervan uitgegaan dat u een opslagaccount met een platte naamruimte hebt. Als je de functie hiërarchische naamruimte voor je opslagaccount inschakelt, zijn mappen niet virtueel. In plaats daarvan zijn het concrete, onafhankelijke objecten. Als gevolg hiervan worden mappen in de lijst weergegeven als blobs met lengte nul.
Zie De inhoud van de lijstmap (Azure Data Lake Storage) voor een alternatieve vermeldingsoptie wanneer u met een hiërarchische naamruimte werkt.
Een hiërarchische vermelding gebruiken
Wanneer u een vermeldingsbewerking hiërarchisch aanroept, retourneert Azure Storage de virtuele mappen en blobs op het eerste niveau van de hiërarchie.
Gebruik de volgende methode om blobs hiërarchisch weer te geven:
In het volgende voorbeeld worden de blobs in de opgegeven container weergegeven met behulp van een hiërarchische lijst:
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());
}
});
}
Voorbeelduitvoer is vergelijkbaar met:
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
Notitie
Blob-snapshots kunnen niet worden vermeld in een hiërarchische lijstoperatie.
Blobs weergeven in Apache Arrow-formaat (preview)
Important
Het weergeven van blobs in Apache Arrow-formaat staat momenteel in PREVIEW. In dit scenario is een bètaversie (previewversie) van de Azure Blob Storage-clientbibliotheek voor Java vereist (bijvoorbeeld azure-storage-blob of een latere previewversie). Preview-functies worden aangeboden zonder service level agreement en worden niet aanbevolen voor productieworkloads. Sommige functies worden mogelijk niet ondersteund, of hebben beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.
Deze mogelijkheid is gebouwd op de bestaande List Blobs API. In plaats van de standaard XML gebruikt het het compacte, kolomvormige Apache Arrow-formaat als responsformaat op de wire. Je schakelt het in door één optie in te stellen op de containerlijst-aanroep. De Java SDK decodeert Apache Arrow achter de schermen en geeft nog steeds dezelfde BlobItem objecten terug. Deze aanpak verbetert de doorvoersnelheid van lijsten en vermindert de client-side CPU bij het opsommen van grote containers. Het behoudt het responscontract waarop applicaties vertrouwen.
Warning
Het vermelden van blobs in Apache Arrow-formaat wordt niet ondersteund op opslagaccounts met hiërarchische naamruimte (Azure Data Lake Storage) ingeschakeld.
Om resultaten met Apache Arrow-formaat op te vragen, stelt u het responsserialisatieformaat op ListBlobsOptions in op StorageResponseSerializationFormat.ARROW door te roepen setStorageResponseSerializationFormat, en geeft vervolgens de opties door aan BlobContainerClient.listBlobs. Wanneer je Apache Arrow-output gebruikt, kun je ook setStartFrom en setEndBefore aanroepen om het bereik van geretourneerde paden te bepalen.
Het volgende voorbeeld geeft de blobs in een container weer en vraagt de resultaten op in Apache Arrow-formaat:
ListBlobsOptions options = new ListBlobsOptions()
.setPrefix("folderA/")
.setStorageResponseSerializationFormat(StorageResponseSerializationFormat.ARROW);
for (BlobItem blobItem : containerClient.listBlobs(options, null)) {
System.out.println("Blob name: " + blobItem.getName());
}
Middelen
Voor meer informatie over hoe je blobs kunt vermelden met behulp van de Azure Blob Storage clientbibliotheek voor Java, zie de volgende bronnen.
Codevoorbeelden
REST API-bewerkingen
De Azure SDK voor Java bevat bibliotheken die voortbouwen op de Azure REST API. Door deze bibliotheken te gebruiken, kun je interactie hebben met REST API-operaties via bekende Java-paradigma's. De clientbibliotheekmethoden voor het weergeven van blobs gebruiken de volgende REST API-bewerking:
Bronnen van de clientbibliotheek
Zie ook
Gerelateerde inhoud
- Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Java. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Uw Java-app bouwen voor meer informatie.