Dela via


Ta bort och återställa en blob med Java

Den här artikeln visar hur du tar bort blobar med Azure Storage-klientbiblioteket för Java och hur du återställer mjuk borttagna blobar under kvarhållningsperioden.

Förutsättningar

Konfigurera din miljö

Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Java. Mer information finns i Kom igång med Azure Blob Storage och Java.

Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.

Kommentar

Den här artikeln använder verktyget Maven-kompilering för att skapa och köra exempelkoden. Andra byggverktyg, till exempel Gradle, fungerar också med Azure SDK för Java.

Installera paket

pom.xml Öppna filen i textredigeraren. Installera paketen genom att inkludera BOM-filen eller inkludera ett direkt beroende.

Lägga till importinstruktioner

Lägg till följande import-uttryck:

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;

Auktorisering

Auktoriseringsmekanismen måste ha de behörigheter som krävs för att ta bort en blob eller återställa en mjuk borttagen blob. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Ta bort blob (REST API) och REST-API (Undelete Blob).

Skapa ett klientobjekt

Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient.

I följande exempel används BlobServiceClientBuilder för att skapa ett BlobServiceClient objekt med , DefaultAzureCredentialoch visar hur du skapar container- och blobklienter om det behövs:

// 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>");

Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.

Ta bort en blob

Kommentar

När mjuk borttagning av blobar är aktiverat för ett lagringskonto kan du inte utföra en permanent borttagning med hjälp av klientbiblioteksmetoder. Med hjälp av metoderna i den här artikeln förblir en mjuk borttagen blob, blobversion eller ögonblicksbild tillgänglig tills kvarhållningsperioden upphör att gälla, då den tas bort permanent. Mer information om den underliggande REST API-åtgärden finns i Ta bort blob (REST API).

Om du vill ta bort en blob anropar du någon av följande metoder:

I följande exempel tas en blob bort:

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

Om bloben har några associerade ögonblicksbilder måste du ta bort alla dess ögonblicksbilder för att ta bort bloben. I följande exempel tas en blob och dess ögonblicksbilder bort med ett svar:

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());
    }
}

Om du bara vill ta bort ögonblicksbilderna och inte själva bloben kan du skicka parametern DeleteSnapshotsOptionType.ONLY.

Återställa en borttagen blob

Mjuk borttagning av blobar skyddar en enskild blob, versioner, ögonblicksbilder och metadata från oavsiktliga borttagningar eller överskrivningar genom att spara borttagna data i systemet under en angiven tidsperiod. Under kvarhållningsperioden kan du återställa bloben till dess tillstånd när den togs bort. När kvarhållningsperioden har gått ut tas bloben bort permanent. Mer information om mjuk borttagning av blobar finns i Mjuk borttagning för blobar.

Du kan använda Azure Storage-klientbiblioteken för att återställa en mjuk borttagen blob eller ögonblicksbild.

Hur du återställer en mjuk borttagen blob beror på om ditt lagringskonto har blobversionshantering aktiverat eller inte. Mer information om blobversioner finns i Blob-versionshantering. Se något av följande avsnitt, beroende på ditt scenario:

Återställa mjukt borttagna objekt när versionshantering är inaktiverat

Om du vill återställa borttagna blobar anropar du följande metod:

Den här metoden återställer innehållet och metadata för en mjuk borttagen blob och eventuella associerade ögonblicksbilder med mjuk borttagning. Att anropa den här metoden för en blob som inte har tagits bort har ingen effekt.

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

Återställa mjukt borttagna objekt när versionshantering är aktiverat

Om ett lagringskonto har konfigurerats för att aktivera blobversionshantering blir den aktuella versionen av bloben den tidigare versionen om du tar bort en blob. Om du vill återställa en mjuk borttagen blob när versionshantering är aktiverat kopierar du en tidigare version över basbloben. Du kan använda följande metod:

Den här metoden återställer innehållet och metadata för en mjuk borttagen blob och eventuella associerade ögonblicksbilder med mjuk borttagning. Att anropa den här metoden för en blob som inte har tagits bort har ingen effekt.

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());
}

Återställa mjukt borttagna blobar och kataloger (hierarkiskt namnområde)

Viktigt!

Det här avsnittet gäller endast konton som har ett hierarkiskt namnområde.

  1. Kom igång genom att öppna filen pom.xml i textredigeraren. Lägg till följande beroendeelement i gruppen med beroenden.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Lägg sedan till dessa importinstruktioner i kodfilen.

    Put imports here
    
  3. Följande kodfragment återställer en mjuk borttagen fil med namnet my-file.

    Den här metoden förutsätter att du har skapat en DataLakeServiceClient-instans . Information om hur du skapar en DataLakeServiceClient-instans finns i Ansluta till kontot.

    
    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);
     }
    
    

    Om du byter namn på katalogen som innehåller de mjukt borttagna objekten kopplas dessa objekt från från katalogen. Om du vill återställa dessa objekt måste du återställa namnet på katalogen till dess ursprungliga namn eller skapa en separat katalog som använder det ursprungliga katalognamnet. Annars får du ett fel när du försöker återställa de mjukt borttagna objekten.

Resurser

Mer information om hur du tar bort blobar och återställer borttagna blobar med hjälp av Azure Blob Storage-klientbiblioteket för Java finns i följande resurser.

Kodexempel

REST API-åtgärder

Azure SDK för Java innehåller bibliotek som bygger på Azure REST API, så att du kan interagera med REST API-åtgärder via välbekanta Java-paradigm. Klientbiblioteksmetoderna för att ta bort blobar och återställa borttagna blobar använder följande REST API-åtgärder:

Klientbiblioteksresurser

Se även

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Java. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Java-app.