共用方式為


使用 JAVA 刪除和還原 Blob

本文說明如何使用適用於 JAVA 的 Azure 儲存體用戶端程式庫來刪除 blob。 如果您已啟用 Blob 的虛刪除,則可以在保留期間還原已刪除的 Blob。

必要條件

  • 本文會假設您已有專案設定好要使用適用於 Java 的 Azure Blob 儲存體用戶端程式庫。 若要了解如何設定專案,包括封裝安裝、新增 import 指示詞以及建立已授權的用戶端物件,請參閱開始使用 Azure 儲存體和 JAVA
  • 授權機制必須具有刪除 Blob 或還原虛刪除 Blob 的權限。 若要深入了解,請參閱下列 REST API 作業的授權指引:

刪除 Blob

若要刪除 Blob,請呼叫下列其中一種方法:

下列範例會刪除 blob:

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

如果 Blob 具有任何相關聯的快照集,您必須刪除其所有快照集,才能刪除 Blob。 下列範例會刪除 Blob 及其快照集並附回應:

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

若僅刪除快照集,而不刪除 Blob 本身,則可以傳遞參數 DeleteSnapshotsOptionType.ONLY

還原已刪除的 Blob

Blob 虛刪除可保護個別的 Blob 及其版本、快照集和中繼資料,將刪除的資料保留在系統中一段指定時間,避免不小心刪除或覆寫資料。 在保留期間內,您可以在刪除時將 Blob 還原至其狀態。 保留期限到期後,即會永久刪除該 Blob。 如需關於 Blob 虛刪除的詳細資訊,請參閱 Blob 的虛刪除

您可以使用 Azure 儲存體用戶端程式庫來還原已虛刪除的 Blob 或快照集。

還原虛刪除 Blob 的方式,取決於您的儲存體帳戶是否已啟用 Blob 版本設定。 如需 Blob 版本設定的詳細資訊,請參閱 Blob 版本設定。 視您的情節而定,請參閱下列其中一個區段:

在停用版本控制時還原虛刪除的物件

若要將已刪除的 Blob 還原,請呼叫下列方法:

此方法會還原虛刪除 Blob 的內容和中繼資料,以及任何相關聯的虛刪除快照集。 針對未刪除的 Blob 呼叫這個方法,不會有任何作用。

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

在停用版本設定時,還原虛刪除的物件

若儲存體帳戶設定為啟用 Blob 版本設定,則刪除 Blob 會導致目前版本的 Blob 變成舊版。 若要在啟用版本設定時還原已虛刪除的 Blob,請透過基底 Blob 複製舊版。 您可以使用下列方法:

此方法會還原虛刪除 Blob 的內容和中繼資料,以及任何相關聯的虛刪除快照集。 針對未刪除的 Blob 呼叫這個方法,不會有任何作用。

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

還原虛刪除的 blob 和目錄 (階層命名空間)

重要

本節僅適用於具有階層命名空間的帳戶。

  1. 若要開始使用,請在文字編輯器中開啟 pom.xml 檔案。 將下列相依性元素加入至相依性群組。

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. 接下來,將這些匯入陳述式新增至您的程式碼檔案。

    Put imports here
    
  3. 下列程式碼片段會還原名為 my-file 的虛刪除檔案。

    這個方法會假設您已建立 DataLakeServiceClient 執行個體。 若要了解如何建立 DataLakeServiceClient 執行個體,請參閱連線到帳戶

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

    如果您重新命名包含虛刪除項目的目錄,這些項目與目錄的連線就會中斷。 如果您想要還原這些項目,您必須將目錄的名稱還原回其原始名稱,或建立使用原始目錄名稱的不同目錄。 否則,當您嘗試還原這些虛刪除的項目時,將會收到錯誤。

資源

若要深入了解如何使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫來刪除 Blob 和還原已刪除的 Blob,請參閱下列資源。

REST API 操作

適用於 JAVA 的 Azure SDK 包含建置在 Azure REST API 上的程式庫,可讓您透過熟悉的 JAVA 範例與 REST API 作業進行互動。 用於刪除 Blob 和還原已刪除 Blob 的用戶端程式庫方法,會使用下列 REST API 作業:

程式碼範例

用戶端程式庫資源

另請參閱