使用 Java 管理容器屬性和中繼資料
除了包含的資料之外,Blob 容器還支援系統屬性和使用者定義的中繼資料。 此文章說明如何使用適用於 Java 的 Azure 儲存體用戶端程式庫,來管理系統屬性和使用者定義的中繼資料。
必要條件
- 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.storage.blob.*;
import com.azure.storage.blob.models.*;
import java.util.*;
授權
授權機制必須含有處理容器屬性或中繼資料的必要權限。 若要使用 Microsoft Entra ID 進行授權 (建議),您需要 Azure RBAC 內建角色儲存體 Blob 資料讀者或更高權限,才能「取得」作業,以及儲存體 Blob 資料參與者或更新版本,才能「設定」作業。 若要深入了解,請參閱取得容器屬性 (REST API)、設定容器中繼資料 (REST API) 或取得容器中繼資料 (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 儲存體資源上。 其中一些可以讀取或設定,另一些則是唯讀的。 有些系統屬性會在幕後對應至特定的標準 HTTP 標頭。 適用於 Java 的 Azure 儲存體用戶端程式庫會為您維護這些屬性。
使用者定義的中繼資料:使用者定義的中繼資料是由您為 Blob 儲存體資源所指定一或多個成對的名稱和數值所組成。 您可以使用中繼資料來儲存資源的額外值。 中繼資料值僅供您自己使用,並不會影響資源的運作方式。
中繼資料名稱/值組是有效的 HTTP 標頭,所以應該遵守控管 HTTP 標頭的所有限制。 如需中繼資料命名需求的詳細資訊,請參閱中繼資料名稱。
擷取容器屬性
若要擷取容器屬性,請使用下列其中一種方法:
下列程式碼範例會擷取容器的系統屬性,並將屬性值寫入主控台視窗:
public void getContainerProperties(BlobContainerClient blobContainerClient) {
BlobContainerProperties properties = blobContainerClient.getProperties();
System.out.printf("Public Access Type: %s, Legal Hold? %b, Immutable? %b%n",
properties.getBlobPublicAccess(),
properties.hasLegalHold(),
properties.hasImmutabilityPolicy());
}
設定及擷取中繼資料
您可以將中繼資料指定為 blob 或容器資源上的一個或多個成對的名稱和數值。 若要設定中繼資料,請使用下列方法:
設定容器中繼資料會覆寫與容器相關聯的所有現有中繼資料。 您無法修改個別名稱/值組。
下列程式碼範例會在容器上設定中繼資料:
public void addContainerMetadata(BlobContainerClient blobContainerClient) {
Map<String, String> metadata = new HashMap<String, String>();
metadata.put("docType", "text");
metadata.put("category", "reference");
try {
blobContainerClient.setMetadata(metadata);
System.out.printf("Set metadata completed %n");
} catch (UnsupportedOperationException error) {
System.out.printf("Failure while setting metadata %n");
}
}
若要擷取中繼資料,請呼叫下列方法:
下列範例會在中繼資料值中讀取:
public void readContainerMetadata(BlobContainerClient blobContainerClient) {
BlobContainerProperties properties = blobContainerClient.getProperties();
System.out.printf("Container metadata: %n");
properties.getMetadata().entrySet().forEach(metadataItem -> {
System.out.printf(" %s = %s%n", metadataItem.getKey(), metadataItem.getValue());
});
}
資源
若要深入了解如何使用適用於 Java 的 Azure Blob 儲存體用戶端程式庫來設定和擷取容器屬性和中繼資料,請參閱下列資源。
程式碼範例
- 檢視本文中的程式碼範例 (GitHub) (英文)
REST API 操作
適用於 Java 的 Azure SDK 包含建置在 Azure REST API 上的程式庫,可讓您透過熟悉的 Java 範例與 REST API 作業進行互動。 用來設定與擷取屬性和中繼資料的用戶端程式庫方法會使用下列 REST API 作業:
getProperties
方法會藉由呼叫取得 Blob 屬性作業和取得 Blob 中繼資料作業來擷取 Blob 容器和中繼資料。
用戶端程式庫資源
- 用戶端程式庫參考文件
- 用戶端程式庫原始程式碼
- 套件 (Maven) \(英文\)
相關內容
- 本文是適用於 JAVA 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 JAVA 應用程式 (部分機器翻譯) 的開發人員指南文章完整清單。