Freigeben über


Löschen und Wiederherstellen eines Blobs mit Java

In diesem Artikel wird beschrieben, wie Blobs mithilfe der Azure Storage-Clientbibliothek für Java gelöscht werden. Wenn Sie vorläufiges Löschen für Blobs aktiviert haben, können Sie gelöschte Blobs während des Aufbewahrungszeitraums wiederherstellen.

Voraussetzungen

  • In diesem Artikel wird davon ausgegangen, dass Sie bereits ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für Java eingerichtet haben. Informationen zum Einrichten Ihres Projekts – einschließlich Paketinstallation, Hinzufügen von import-Anweisungen und Erstellen eines autorisierten Clientobjekts – finden Sie unter Erste Schritte mit Azure Storage und Java.
  • Der Autorisierungsmechanismus muss über Berechtigungen zum Löschen eines Blobs oder zum Wiederherstellen eines vorläufig gelöschten Blobs verfügen. Weitere Informationen finden Sie im Autorisierungsleitfaden für die folgenden REST-API-Vorgänge:

Löschen eines Blobs

Rufen Sie zum Löschen eines Blobs 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.

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:

Codebeispiele

Ressourcen zur Clientbibliothek

Weitere Informationen