Freigeben über


Löschen und Wiederherstellen eines Blobs mit Java

In diesem Artikel wird gezeigt, wie Sie Blobs mithilfe der Azure Storage-Clientbibliothek für Java löschen, und wie Sie Blobs wiederherstellen, die während des Aufbewahrungszeitraums vorläufig gelöscht wurden.

Voraussetzungen

Erstellen Ihrer Umgebung

Wenn Sie nicht über ein vorhandenes Projekt verfügen, wird in diesem Abschnitt gezeigt, wie Sie ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für Java einrichten. Weitere Informationen finden Sie unter Erste Schritte mit Azure Blob Storage mit Java.

Um die Codebeispiele in diesem Artikel zu verwenden, führen Sie die folgenden Schritte zum Einrichten Ihres Projekts aus.

Hinweis

In diesem Artikel wird das Maven-Buildtool verwendet, um den Beispielcode zu erstellen und auszuführen. Andere Buildtools (beispielsweise Gradle) können ebenfalls mit dem Azure SDK für Java verwendet werden.

Installieren von Paketen

Öffnen Sie die Datei pom.xml in Ihrem Text-Editor. Installieren Sie die Pakete durch Einbeziehen der BOM-Datei oder Einbeziehen einer direkten Abhängigkeit.

Hinzufügen von Importanweisungen

Fügen Sie die folgenden import -Anweisungen ein:

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;

Autorisierung

Der Autorisierungsmechanismus muss über die erforderlichen Berechtigungen zum Löschen eines Blobs oder Wiederherstellen eines vorläufig gelöschten Blobs verfügen. Für die Autorisierung mit Microsoft Entra ID (empfohlen) benötigen Sie mindestens die integrierte Azure RBAC-Rolle Mitwirkender an Storage-Blobdaten. Weitere Informationen finden Sie in den Autorisierungsanleitungen für Blob löschen (REST API) und Blob löschen aufheben (REST API).

Erstellen eines Clientobjekts

Um eine App mit Blob Storage zu verbinden, erstellen Sie eine Instanz von BlobServiceClient.

Im folgenden Beispiel wird BlobServiceClientBuilder verwendet, um ein BlobServiceClient-Objekt mithilfe von DefaultAzureCredential zu erstellen, und zeigt, wie Container- und Blob-Clients erstellt werden, falls erforderlich:

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

Weitere Informationen zum Erstellen und Verwalten von Clientobjekten finden Sie unter Erstellen und Verwalten von Clientobjekten, die mit Datenressourcen interagieren.

Löschen eines Blobs

Hinweis

Wenn „vorläufiges Löschen“ für Blobs in einem Speicherkonto aktiviert ist, können Sie mithilfe der Methoden aus der Clientbibliothek keinen dauerhaften Löschvorgang durchführen. Wenn Sie die Methoden in diesem Artikel verwenden, bleiben ein vorläufig gelöschtes Blob, eine Blobversion oder eine Momentaufnahme verfügbar, bis der Aufbewahrungszeitraum abläuft. Zu diesem Zeitpunkt erfolgt dann die dauerhafte Löschung. Weitere Informationen zum zugrunde liegenden REST-API-Vorgang finden Sie unter Blob löschen (REST-API).

Um ein Blob zu löschen, rufen Sie eine der folgenden Methoden auf:

Im folgenden Beispiel wird ein Blob gelöscht:

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

Wenn das Blob über zugeordnete Momentaufnahmen verfügt, müssen Sie alle zugehörigen Momentaufnahmen löschen, um das Blob löschen zu können. Im folgenden Beispiel werden ein Blob und dessen Momentaufnahmen mit einer Antwort gelöscht:

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

Um nur die Momentaufnahmen und nicht das Blob selbst zu löschen, können Sie den DeleteSnapshotsOptionType.ONLY-Parameter übergeben.

Wiederherstellen eines gelöschten Blobs

Vorläufiges Löschen von Blobs schützt ein einzelnes Blob sowie seine Versionen, Momentaufnahmen und Metadaten vor versehentlichen Lösch- oder Überschreibungsvorgängen, da die Daten für einen gewissen Zeitraum im System verbleiben. Während der Beibehaltungsdauer kann das Blob in dem Zustand wiederhergestellt werden, in dem es sich zum Zeitpunkt der Löschung befand. Nach Ablauf der Beibehaltungsdauer wird das Blob endgültig gelöscht. Weitere Informationen zum vorläufigen Löschen von Blobs finden Sie unter Vorläufiges Löschen für Blobs.

Sie können die Azure Storage-Clientbibliotheken verwenden, um vorläufig gelöschte Blobs oder Momentaufnahmen wiederherzustellen.

Wie Sie ein vorläufig gelöschtes Blob wiederherstellen, hängt davon ab, ob für Ihr Speicherkonto die Blobversionsverwaltung aktiviert ist. Weitere Informationen zur Blobversionsverwaltung finden Sie unter Blobversionsverwaltung. Lesen Sie je nach Ihrem Szenario einen der folgenden Abschnitte:

Wiederherstellen vorläufig gelöschter Objekte bei deaktivierter Versionsverwaltung

Rufen Sie zum Wiederherstellen von gelöschten Blobs die folgende Methode auf:

Mit dieser Methode werden der Inhalt und die Metadaten eines vorläufig gelöschten Blobs und aller zugeordneten vorläufig gelöschten Momentaufnahmen wiederhergestellt. Das Aufrufen dieser Methode für ein nicht gelöschtes Blob hat keine Auswirkungen.

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

Wiederherstellen vorläufig gelöschter Objekte bei aktivierter Versionsverwaltung

Wenn ein Speicherkonto für die Aktivierung der Blobversionsverwaltung konfiguriert ist, führt das Löschen eines Blobs dazu, dass die aktuelle Version des Blobs zur vorherigen Version wird. Um ein vorläufig gelöschtes Blob bei aktivierter Versionsverwaltung wiederherzustellen, kopieren Sie eine vorherige Version über das Basisblob. Sie können die folgende Methode verwenden:

Mit dieser Methode werden der Inhalt und die Metadaten eines vorläufig gelöschten Blobs und aller zugeordneten vorläufig gelöschten Momentaufnahmen wiederhergestellt. Das Aufrufen dieser Methode für ein nicht gelöschtes Blob hat keine Auswirkungen.

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

Wiederherstellen vorläufig gelöschter Blobs und Verzeichnisse (hierarchischer Namespace)

Wichtig

Dieser Abschnitt gilt nur für Konten mit einem hierarchischen Namespace.

  1. Öffnen Sie zunächst die Datei pom.xml in Ihrem Text-Editor. Fügen Sie der Gruppe „dependencies“ das folgende Abhängigkeitselement hinzu.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Fügen Sie dann die folgenden Import-Anweisungen zu Ihrer Codedatei hinzu.

    Put imports here
    
  3. Mit dem folgenden Codeschnipsel wird eine vorläufig gelöschte Datei mit dem Namen my-file wiederhergestellt.

    Bei dieser Methode wird davon ausgegangen, dass Sie eine DataLakeServiceClient-Instanz erstellt haben. Informationen zum Erstellen einer DataLakeServiceClient-Instanz finden Sie unter Herstellen einer Verbindung mit dem Konto.

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

    Wenn Sie das Verzeichnis umbenennen, das die vorläufig gelöschten Elemente enthält, werden diese Elemente vom Verzeichnis getrennt. Wenn Sie diese Elemente wiederherstellen möchten, müssen Sie den Namen des Verzeichnisses auf seinen ursprünglichen Namen zurücksetzen oder ein separates Verzeichnis erstellen, das den ursprünglichen Verzeichnisnamen verwendet. Andernfalls werden Sie einen Fehler erhalten, wenn Sie versuchen, diese vorläufig gelöschten Elemente wiederherzustellen.

Ressourcen

Weitere Informationen zum Löschen von Blobs und zum Wiederherstellen gelöschter Blobs mithilfe der Azure Blob Storage-Clientbibliothek für Java finden Sie in den folgenden Ressourcen.

Codebeispiele

REST-API-Vorgänge

Das SDK für Java enthält Bibliotheken, die auf der zugrunde liegenden Azure-REST-API basieren, und ermöglicht Ihnen dadurch die Interaktion mit REST-API-Vorgängen über vertraute Java-Paradigmen. Die Methoden der Clientbibliothek zum Löschen oder Wiederherstellen von Blobs verwenden die folgenden REST-API-Vorgänge:

Ressourcen zur Clientbibliothek

Weitere Informationen

  • Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für Java. Weitere Informationen finden Sie in der vollständigen Liste der Entwicklerleitfadenartikel unter Erstellen Ihrer Java-App.