使用 JAVA 刪除和還原 Blob
本文說明如何使用適用於 JAVA 的 Azure 儲存體用戶端程式庫刪除 Blob,以及如何在保留期間還原虛刪除的 Blob。
必要條件
- Azure 訂用帳戶 - 建立免費帳戶
- Azure 儲存體帳戶 - 建立儲存體帳戶
- JAVA 開發套件 (JDK) 第 8 版或更新版本 (建議使用第 17 版以獲得最佳體驗)
- 在此範例中,Apache Maven 用於專案管理
設定您的環境
如果沒有現有的專案,本章節會說明如何設定專案以使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫。 如需詳細資訊,請參閱開始使用 Azure Blob 儲存體和 JAVA (部分機器翻譯)。
若要使用本文中的程式碼範例,請遵循下列步驟來設定您的專案。
注意
本文使用 Maven 建置工具來建置和執行範例程式碼。 Gradle 等其他建置工具也能與適用於 Java 的 Azure SDK 搭配運作。
安裝套件
在文字編輯器中開啟 pom.xml
檔案。 包含 BOM 檔案或包含直接相依性以安裝套件。
新增 import 陳述式
加入下列 import
陳述式:
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;
授權
授權機制必須具有刪除 Blob 或還原虛刪除 Blob 的必要權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱刪除 Blob (REST API) 和取消刪除 Blob (REST API) 的授權指導。
建立用戶端物件
若要將應用程式連線至 Blob 儲存體,請建立 BlobServiceClient類別的執行個體。
下列範例會使用 BlobServiceClientBuilder,使用 DefaultAzureCredential
建置 BlobServiceClient
物件,並視需要示範如何建立容器和 Blob 用戶端:
// 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>");
若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。
刪除 Blob
注意
針對儲存體帳戶啟用 Blob 虛刪除時,您無法使用用戶端程式庫方法來執行永久刪除。 使用本文中的方法,虛刪除的 Blob、Blob 版本或快照集會維持可用狀態,直到保留期間到期,此時會永久刪除。 若要深入了解基礎 REST API 作業,請參閱刪除 Blob (REST API)。
若要刪除 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 和目錄 (階層命名空間)
重要
本節僅適用於具有階層命名空間的帳戶。
若要開始使用,請在文字編輯器中開啟 pom.xml 檔案。 將下列相依性元素加入至相依性群組。
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-file-datalake</artifactId> <version>12.6.0</version> </dependency>
接下來,將這些匯入陳述式新增至您的程式碼檔案。
Put imports here
下列程式碼片段會還原名為
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,請參閱下列資源。
程式碼範例
- 檢視本文中的程式碼範例 (GitHub) (英文)
REST API 操作
適用於 JAVA 的 Azure SDK 包含建置在 Azure REST API 上的程式庫,可讓您透過熟悉的 JAVA 範例與 REST API 作業進行互動。 用於刪除 Blob 和還原已刪除 Blob 的用戶端程式庫方法,會使用下列 REST API 作業:
用戶端程式庫資源
- 用戶端程式庫參考文件
- 用戶端程式庫原始程式碼
- 套件 (Maven) \(英文\)
另請參閱
相關內容
- 本文是適用於 JAVA 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 JAVA 應用程式 (部分機器翻譯) 的開發人員指南文章完整清單。