Delen via


Een blob verwijderen en herstellen met Java

In dit artikel wordt beschreven hoe u blobs verwijdert met de Azure Storage-clientbibliotheek voor Java en hoe u voorlopig verwijderde blobs herstelt tijdens de bewaarperiode.

Vereisten

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 slaan of door een directe afhankelijkheid op te slaan.

Importinstructies toevoegen

Voeg de volgende import instructies toe:

import com.azure.core.http.rest.*;
import com.azure.core.util.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

Autorisatie

Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om een blob te verwijderen of om een voorlopig verwijderde blob te herstellen. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor Delete Blob (REST API) en Undelete Blob (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.

Een blob verwijderen

Notitie

Wanneer voorlopig verwijderen van blobs is ingeschakeld voor een opslagaccount, kunt u geen permanente verwijdering uitvoeren met behulp van clientbibliotheekmethoden. Met behulp van de methoden in dit artikel blijft een voorlopig verwijderde blob, blobversie of momentopname beschikbaar totdat de bewaarperiode verloopt, waarna deze definitief wordt verwijderd. Zie Blob (REST API) verwijderen voor meer informatie over de onderliggende REST API-bewerking.

Als u een blob wilt verwijderen, roept u een van de volgende methoden aan:

In het volgende voorbeeld wordt een blob verwijderd:

public void deleteBlob(BlobClient blobClient) {
    blobClient.delete();
}

Als de blob gekoppelde momentopnamen heeft, moet u alle momentopnamen verwijderen om de blob te verwijderen. In het volgende voorbeeld worden een blob en de bijbehorende momentopnamen met een antwoord verwijderd:

public void deleteBlobWithSnapshots(BlobClient blobClient) {
    Response<Boolean> response = blobClient.deleteIfExistsWithResponse(DeleteSnapshotsOptionType.INCLUDE, null,
            null,
            new Context("key", "value"));
    if (response.getStatusCode() == 404) {
        System.out.println("Blob does not exist");
    } else {
        System.out.printf("Delete blob completed with status %d%n", response.getStatusCode());
    }
}

Als u alleen de momentopnamen en niet de blob zelf wilt verwijderen, kunt u de parameter DeleteSnapshotsOptionType.ONLYdoorgeven.

Een verwijderde blob herstellen

Met voorlopig verwijderen van blobs wordt een afzonderlijke blob en zijn versies, momentopnamen en metagegevens beschermd tegen onbedoeld verwijderen of overschrijven door de verwijderde gegevens gedurende een opgegeven periode in het systeem te behouden. Tijdens de retentieperiode kunt u de blob herstellen naar de status die deze had bij het verwijderen. Nadat de retentieperiode is verlopen, wordt de blob definitief verwijderd. Zie Voorlopig verwijderen voor blobs voor meer informatie over voorlopig verwijderen van blobs.

U kunt de Azure Storage-clientbibliotheken gebruiken om een voorlopig verwijderde blob of momentopname te herstellen.

Hoe u een voorlopig verwijderde blob herstelt, is afhankelijk van of voor uw opslagaccount blobversiebeheer is ingeschakeld. Zie Blob-versiebeheer voor meer informatie over blobversiebeheer. Bekijk een van de volgende secties, afhankelijk van uw scenario:

Voorlopig verwijderde objecten herstellen wanneer versiebeheer is uitgeschakeld

Als u verwijderde blobs wilt herstellen, roept u de volgende methode aan:

Met deze methode worden de inhoud en metagegevens van een voorlopig verwijderde blob en eventuele gekoppelde voorlopig verwijderde momentopnamen hersteld. Het aanroepen van deze methode voor een blob die niet is verwijderd, heeft geen effect.

public void restoreBlob(BlobClient blobClient) {
    blobClient.undelete();
}

Voorlopig verwijderde objecten herstellen wanneer versiebeheer is ingeschakeld

Als een opslagaccount is geconfigureerd om blobversiebeheer in te schakelen, zorgt het verwijderen van een blob ervoor dat de huidige versie van de blob de vorige versie wordt. Als u een voorlopig verwijderde blob wilt herstellen wanneer versiebeheer is ingeschakeld, kopieert u een vorige versie over de basis-blob. U kunt de volgende methode gebruiken:

Met deze methode worden de inhoud en metagegevens van een voorlopig verwijderde blob en eventuele gekoppelde voorlopig verwijderde momentopnamen hersteld. Het aanroepen van deze methode voor een blob die niet is verwijderd, heeft geen effect.

public void restoreBlobVersion(BlobContainerClient containerClient, BlobClient blobClient){
    // List blobs in this container that match the prefix
    // Include versions in the listing
    ListBlobsOptions options = new ListBlobsOptions()
            .setPrefix(blobClient.getBlobName())
            .setDetails(new BlobListDetails()
                    .setRetrieveVersions(true));
    Iterator<BlobItem> blobItem = containerClient.listBlobs(options, null).iterator();
    List<String> blobVersions = new ArrayList<>();
    while (blobItem.hasNext()) {
        blobVersions.add(blobItem.next().getVersionId());
    }

    // Sort the list of blob versions and get the most recent version ID
    Collections.sort(blobVersions, Collections.reverseOrder());
    String latestVersion = blobVersions.get(0);

    // Get a client object with the name of the deleted blob and the specified version
    BlobClient blob = containerClient.getBlobVersionClient("sampleBlob.txt", latestVersion);

    // Restore the most recent version by copying it to the base blob
    blobClient.copyFromUrl(blob.getBlobUrl());
}

Voorlopig verwijderde blobs en mappen herstellen (hiƫrarchische naamruimte)

Belangrijk

Deze sectie is alleen van toepassing op accounts met een hiƫrarchische naamruimte.

  1. Open het pom.xml-bestand in de teksteditor om aan de slag te gaan. Voeg het volgende afhankelijkheidselement toe aan de groep met afhankelijkheden.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Voeg vervolgens deze importinstructies toe aan uw codebestand.

    Put imports here
    
  3. Met het volgende fragment wordt een voorlopig verwijderd bestand met de naam my-filehersteld.

    Bij deze methode wordt ervan uitgegaan dat u een DataLakeServiceClient-exemplaar hebt gemaakt. Zie Verbinding maken met het account voor meer informatie over het maken van een DataLakeServiceClient-exemplaar.

    
    public void RestoreFile(DataLakeServiceClient serviceClient){
    
        DataLakeFileSystemClient fileSystemClient =
            serviceClient.getFileSystemClient("my-container");
    
        DataLakeFileClient fileClient =
            fileSystemClient.getFileClient("my-file");
    
        String deletionId = null;
    
        for (PathDeletedItem item : fileSystemClient.listDeletedPaths()) {
    
            if (item.getName().equals(fileClient.getFilePath())) {
               deletionId = item.getDeletionId();
            }
        }
    
        fileSystemClient.restorePath(fileClient.getFilePath(), deletionId);
     }
    
    

    Als u de naam van de map met de voorlopig verwijderde items wijzigt, worden deze items losgekoppeld van de map. Als u deze items wilt herstellen, moet u de naam van de map terugzetten naar de oorspronkelijke naam of een afzonderlijke map maken die gebruikmaakt van de oorspronkelijke mapnaam. Anders krijgt u een foutmelding wanneer u probeert deze voorlopig verwijderde items te herstellen.

Resources

Zie de volgende resources voor meer informatie over het verwijderen van blobs en het herstellen van verwijderde blobs met behulp van de Azure Blob Storage-clientbibliotheek voor Java.

Codevoorbeelden

REST API-bewerkingen

De Azure SDK voor Java bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende Java-paradigma's. De clientbibliotheekmethoden voor het verwijderen van blobs en het herstellen van verwijderde blobs gebruiken de volgende REST API-bewerkingen:

  • Blob verwijderen (REST API)
  • Blob ongedaan maken (REST API)

Clientbibliotheekbronnen

Zie ook

  • 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.