注意事項
從 零開始建構 選項會引導你建立專案、安裝套件、撰寫程式碼,以及執行基本的主控台應用程式。 選擇此選項以了解如何建立連接 Azure Blob 儲存體 的應用程式。 要自動化部署任務並以完成專案開始,請選擇 從範本開始。
注意事項
「以範本開始」選項使用 Azure Developer CLI 來自動化部署任務,並提供完成的專案。 選擇此選項即可探索程式碼,無需完成設定任務。 如需逐步建立應用程式的說明,請選擇 「從零開始打造」。
開始使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫管理 Blob 和容器。
在本文中,您會遵循步驟來安裝套件,並嘗試基本工作的範例程式碼。
在本文中,您會使用 Azure Developer CLI 來部署 Azure 資源,並只用幾個命令來執行已完成的主控台應用程式。
秘訣
對於使用 Azure 儲存體 資源的 Spring 應用程式,可以考慮 Spring Cloud Azure。 這個開源專案整合了 Spring 與 Azure 服務。 關於 Blob 儲存體 範例,請參見「將檔案上傳到 Azure 儲存體 Blob。
API 參考文件 | 程式庫來源程式碼 | 套件 (Maven) | 範例
必要條件
- 具有有效訂用帳戶的 Azure 帳戶 - 免費建立帳戶
- Azure 儲存體帳戶 - 建立儲存體帳戶。
- Java 開發套件 (JDK) 版本 1.8_101 或以上
- Apache Maven
- Azure 訂用帳戶 - 建立免費帳戶
- Java 開發套件 (JDK) 版本 1.8_101 或以上
- Apache Maven
- Azure 開發人員命令列介面
設定中
本節會引導您準備專案以搭配使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫。
建立專案
建立名為 blob-quickstart 的 JAVA 應用程式。
在主控台視窗中 (例如 PowerShell 或 Bash),使用 Maven 建立名為 blob-quickstart 的新主控台應用程式。 鍵入下列 mvn 命令,以建立 "Hello world!"Java 專案。
mvn archetype:generate ` --define interactiveMode=n ` --define groupId=com.blobs.quickstart ` --define artifactId=blob-quickstart ` --define archetypeArtifactId=maven-archetype-quickstart ` --define archetypeVersion=1.4檢視產生專案時的產出。
[INFO] Scanning for projects... [INFO] [INFO] ------------------< org.apache.maven:standalone-pom >------------------- [INFO] Building Maven Stub Project (No POM) 1 [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] >>> maven-archetype-plugin:3.1.2:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:3.1.2:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] [INFO] --- maven-archetype-plugin:3.1.2:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Batch mode [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.blobs.quickstart [INFO] Parameter: artifactId, Value: blob-quickstart [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.blobs.quickstart [INFO] Parameter: packageInPathFormat, Value: com/blobs/quickstart [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.blobs.quickstart [INFO] Parameter: groupId, Value: com.blobs.quickstart [INFO] Parameter: artifactId, Value: blob-quickstart [INFO] Project created from Archetype in dir: C:\QuickStarts\blob-quickstart [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7.056 s [INFO] Finished at: 2019-10-23T11:09:21-07:00 [INFO] ------------------------------------------------------------------------ ```切換至新建立的 [blob-quickstart] 資料夾。
cd blob-quickstart在 blob-quickstart 目錄中,建立另一個名為 data 的目錄。 這個資料夾是建立和儲存 blob 資料檔案的地方。
mkdir data
安裝套件
在文字編輯器中開啟 pom.xml 檔案。
新增 azure-sdk-bom,以便依賴該程式庫的最新版本。 在下列程式碼片段中,將 {bom_version_to_target} 預留位置取代為版本號碼。 使用 azure-sdk-bom 後,您不需要指定每個個別相依性的版本。 若要深入了解 BOM,請參閱 Azure SDK BOM 讀我檔案 (英文)。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然後,將下列相依性元素新增至相依性群組。 你需要 azure-identity 依賴,才能無密碼連接 Azure 服務。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
設定應用程式架構
從專案目錄中,依照以下步驟建立應用程式的基本結構:
- 瀏覽到
/src/main/java/com/blobs/quickstart目錄 - 在您的編輯器中開啟
App.java檔案 - 刪除
System.out.println("Hello world!");行 - 新增必要的
import指示詞
程式碼應該類似此架構:
package com.blobs.quickstart;
/**
* Azure Blob Storage quickstart
*/
import com.azure.identity.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import java.io.*;
public class App
{
public static void main(String[] args) throws IOException
{
// Quickstart code goes here
}
}
透過使用 Azure 開發者 CLI,你可以建立儲存帳號,並只需幾個指令就能執行範例程式碼。 你可以在本地開發環境或 DevContainer 中執行專案。
初始化 Azure Developer CLI 範本並部署資源
從空目錄,遵循下列步驟來初始化 azd 範本、佈建 Azure 資源,以及開始使用程式碼:
從 GitHub 複製快速入門存放庫資產,並在本機初始化範本:
azd init --template blob-storage-quickstart-java系統會提示您提供以下資訊:
- Environment name:Azure 開發者 CLI 會將此值作為所有Azure資源的前綴。 名稱必須在所有 Azure 訂閱中唯一,且長度介於 3 到 24 個字元之間。 名稱僅能包含數字和小寫字母。
登入 Azure:
azd auth login佈建資源並將其部署至 Azure:
azd up系統會提示您提供以下資訊:
- 訂閱:Azure 的資源部署訂閱。
- 地點:部署資源的 Azure 區域。
部署可能需要幾分鐘的時間才能完成。 指令的輸出
azd up會包含新建立的儲存帳號名稱,之後執行程式碼時需要它。
執行範例程式碼
此時,資源會部署至 Azure,且程式碼幾乎已準備好執行。 請遵循下列步驟來更新程式碼中的儲存體帳戶名稱,並執行範例主控台應用程式:
-
更新儲存體帳戶名稱:
- 在本機目錄中,瀏覽至 blob-quickstart/src/main/java/com/blobs/quickstart 目錄。
- 在編輯器中開啟名為 App.java 的檔案。 找出
<storage-account-name>預留位置符號,並將其替換為由azd up命令建立的儲存體帳戶實際名稱。 - 儲存變更。
-
執行專案:
- 瀏覽至包含 檔案的
pom.xml目錄。 使用下列mvn命令編譯專案:mvn compile - 以可散發格式封裝已編譯的程式碼:
mvn package - 執行下列
mvn命令以執行應用程式:mvn exec:java
- 瀏覽至包含 檔案的
- 觀察輸出:此應用程式會在本機 data 資料夾中建立一個測試檔案,並將其上傳到儲存體帳戶中的容器。 範例會接著列出容器中的 Blob,並下載具有新名稱的檔案,您便可比較舊檔案和新檔案。
若要深入了解範例程式碼的運作方式,請參閱程式碼範例。
當您完成了測試程式碼時,請參閱清除資源一節,以刪除 azd up 命令所建立的資源。
物件模型
Azure Blob 儲存體已針對儲存大量非結構化資料進行最佳化。 非結構化資料不遵守特定資料模型或定義,例如文字或二進位資料。 Blob 儲存體提供三種類型資源:
- 儲存體帳戶
- 儲存體帳戶中的容器
- 容器中的 Blob
下圖顯示資源之間的關係。
使用下列 Java 類別與這些資源互動:
-
BlobServiceClient: 這個
BlobServiceClient類別管理 Azure 儲存體 資源和 blob 容器。 儲存體帳戶會為 Blob 服務提供最上層命名空間。 -
BlobServiceClientBuilder:這個
BlobServiceClientBuilder類別提供一個流暢的 API,用來配置和建立BlobServiceClient物件。 -
BlobContainerClient:這個
BlobContainerClient類別管理 Azure 儲存體 容器及其 blob。 -
BlobClient:
BlobClient類別可管理 Azure 儲存體 Blob。 -
BlobItem:
BlobItem類別代表從 listBlobs 呼叫傳回的個別 Blob 項目。
程式碼範例
這些範例程式碼片段示範如何使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫來執行下列動作:
重要
在使用程式碼 範例前, 先加入設定中描述的相依關係和指令。
注意事項
Azure Developer CLI 範本包含一個已預先放入範例程式碼的檔案。 下列範例為範例程式碼的每個部分提供詳細資料。 此範本會實作建議的無密碼驗證方法,如向 Azure 驗證一節中所述。 連接字串方法會顯示為替代方案,但不會用於範本中,且不建議用於實際執行程式碼。
向 Azure 驗證,並授權存取 Blob 資料
應用程式向 Azure Blob 儲存體提出的要求必須經過授權。 在程式碼中實作對 Azure 服務 (包括 Blob 儲存體) 的無密碼連線時,建議使用 Azure.Identity 用戶端程式庫提供的 DefaultAzureCredential 類別。
您也可以使用帳戶存取金鑰,以授權對 Azure Blob 儲存體的要求。 不過,應該謹慎使用此方法。 開發人員必須盡可能避免在不安全的地方公開存取金鑰。 任何擁有存取金鑰的人都能對儲存體帳戶的要求進行授權,而且實際上可存取所有資料。
DefaultAzureCredential 提供優於帳戶金鑰的管理和安全性優點,允許無密碼驗證。 下列範例示範這兩個選項。
DefaultAzureCredential 為適用於 JAVA 的 Azure 身分識別用戶端程式庫所提供的類別。
DefaultAzureCredential 支援多種驗證方法,並在執行階段判斷應使用的方法。 此方法可讓您的應用程式在不同的環境中 (本機或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。
您可以在DefaultAzureCredential中找到尋找憑證的順序與地點。
例如,你的應用程式可以在本地開發時使用你的 Visual Studio Code 登入憑證來進行認證。 你的應用程式部署到 Azure 後,可以使用管理身份。 此轉移不需要變更程式碼。
將角色指派給 Microsoft Entra 使用者帳戶
在本機開發時,請確定存取 Blob 資料的使用者帳戶具有正確的權限。 您需要儲存體 Blob 資料參與者才能讀取和寫入 Blob 資料。 若要指派此角色給您自己,您需要被指派使用者存取管理員角色,或另一個包含 Microsoft.Authorization/roleAssignments/write 動作的角色。 您可以使用 Azure 入口網站、Azure CLI 或 Azure PowerShell,將 Azure RBAC 角色指派給使用者。 如需 儲存體 Blob 資料參與者 角色的詳細資訊,請參閱 儲存體 Blob 資料參與者。 如需角色指派可用範圍的詳細資訊,請參閱 瞭解 Azure RBAC 的範圍。
在此案例中,您會將權限指派給使用者帳戶 (以儲存體帳戶為範圍),以遵循最低權限原則。 此做法只為使用者提供所需的最低權限,並建立更安全的實際執行環境。
下列範例將儲存體 Blob 資料參與者角色指派給使用者帳戶,以針對儲存體帳戶中的 Blob 資料提供讀取和寫入存取權。
重要
在大部分情況下,角色指派在 Azure 中傳播只需要一兩分鐘,但在罕見情況下,可能需要長達八分鐘。 如果您第一次執行程式碼時收到驗證錯誤,請稍候片刻再試一次。
在 Azure 入口網站中,使用主要搜尋列或左側導覽找出您的儲存體帳戶。
在儲存體帳戶概觀頁面上,從左側功能表中選取 [存取控制 (IAM)]。
在 [存取控制 (IAM)] 頁面上,選取 [角色指派] 索引標籤。
從頂端功能表選取 [+ 新增],然後從產生的下拉功能表中選取 [新增角色指派]。
使用搜尋方塊,從結果篩選出所需的角色。 在此範例中,搜尋「儲存體 Blob 資料參與者」,選取相符的結果,然後選擇 [下一步]。
在 [存取權指派對象為] 下,選取 [使用者、群組或服務主體],然後選擇 [+ 選取成員]。
在對話方塊中,搜尋 Microsoft Entra 使用者名稱 (通常是您的 user@domain 電子郵件地址),然後在對話方塊底部選擇 [選取]。
選取 [檢閱 + 指派] 以移至最終頁面,然後再次選取 [檢閱 + 指派] 以完成此程序。
登入並使用 DefaultAzureCredential 將你的應用程式程式碼連接到 Azure
請依照以下步驟授權存取您的儲存帳戶中的資料:
用你指派儲存帳號角色的同一個 Microsoft Entra 帳號來驗證。 可以使用 Azure CLI、Visual Studio Code 或 Azure PowerShell。
使用下列命令,透過 Azure CLI 登入 Azure:
az login要使用
DefaultAzureCredential,將 azure-identity 依賴加入到pom.xml:<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> </dependency>將此程式碼新增到
main方法。 當程式碼在你本地工作站執行時,會使用你登入的優先工具的開發憑證來驗證 Azure,例如 Azure CLI 或 Visual Studio Code。/* * The default credential first checks environment variables for configuration * If environment configuration is incomplete, it will try managed identity */ DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build(); // 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(defaultCredential) .buildClient();更新您的
BlobServiceClientURI 中的儲存體帳戶名稱。 在 Azure 入口網站的總覽頁面找到儲存帳號名稱。
注意事項
部署至 Azure 時,您可以使用上述程式碼,從 Azure 中執行的應用程式授權對 Azure 儲存體的要求。 不過,你需要在 Azure 中啟用你的應用程式中的受管理身份。 然後,將您的儲存體帳戶設定為允許該受控識別進行連線。 如需在 Azure 服務之間設定此連線的詳細指示,請參閱從 Azure 託管應用程式進行驗證教學課程。
建立容器
在 物件上呼叫 blobServiceClient 方法,在您的儲存體帳戶中建立新的容器。 在此範例中,程式碼會將 GUID 值附加到容器名稱,以確保其為唯一名稱。
將此程式碼加入到 main 方法的結尾處:
// Create a unique name for the container
String containerName = "quickstartblobs" + java.util.UUID.randomUUID();
// Create the container and return a container client object
BlobContainerClient blobContainerClient = blobServiceClient.createBlobContainer(containerName);
欲了解更多資訊與範例,請參閱「用 Java 建立 blob 容器」。
重要
容器名稱必須是小寫字母。 如需為容器和 Blob 命名的詳細資訊,請參閱命名和參考容器、Blob 及中繼資料。
將 Blob 上傳至容器
呼叫 uploadFromFile 方法,將 Blob 上傳至容器。 此範例程式碼會在本機 data 目錄中建立文字檔,以上傳至容器。
將此程式碼加入到 main 方法的結尾處:
// Create the ./data/ directory and a file for uploading and downloading
String localPath = "./data/";
new File(localPath).mkdirs();
String fileName = "quickstart" + java.util.UUID.randomUUID() + ".txt";
// Get a reference to a blob
BlobClient blobClient = blobContainerClient.getBlobClient(fileName);
// Write text to the file
FileWriter writer = null;
try
{
writer = new FileWriter(localPath + fileName, true);
writer.write("Hello, World!");
writer.close();
}
catch (IOException ex)
{
System.out.println(ex.getMessage());
}
System.out.println("\nUploading to Blob storage as blob:\n\t" + blobClient.getBlobUrl());
// Upload the blob
blobClient.uploadFromFile(localPath + fileName);
欲了解更多資訊與範例,請參閱「用 Java 上傳 blob」。
列出容器中的 Blob
呼叫 list_blobs 方法,以列出容器中的 Blob。 在這種情況下,你只往容器中新增了一個 blob,所以 listing 操作只會回傳那一個 blob。
將此程式碼加入到 main 方法的結尾處:
System.out.println("\nListing blobs...");
// List the blob(s) in the container.
for (BlobItem blobItem : blobContainerClient.listBlobs()) {
System.out.println("\t" + blobItem.getName());
}
欲了解更多資訊與範例,請參閱 Java 的列表塊。
下載 Blob
呼叫 downloadToFile 方法,以下載先前建立的 Blob。 範例程式碼會在檔名後加上 的後綴, DOWNLOAD 讓你能在本地檔案系統中看到兩個檔案。
將此程式碼加入到 main 方法的結尾處:
// Download the blob to a local file
// Append the string "DOWNLOAD" before the .txt extension for comparison purposes
String downloadFileName = fileName.replace(".txt", "DOWNLOAD.txt");
System.out.println("\nDownloading blob to\n\t " + localPath + downloadFileName);
blobClient.downloadToFile(localPath + downloadFileName);
欲了解更多資訊與範例,請參閱「用 Java 下載 blob」。
刪除容器
以下程式碼是透過 刪除 方法移除整個容器,清理應用程式所建立的資源。 它也會刪除應用程式所建立的本機檔案。
應用程式會在刪除 Blob、容器和本機檔案之前呼叫 System.console().readLine(),藉以暫停使用者輸入。 這個暫停讓你有機會確認應用程式是否正確建立資源,然後再刪除它們。
將此程式碼加入到 main 方法的結尾處:
File downloadedFile = new File(localPath + downloadFileName);
File localFile = new File(localPath + fileName);
// Clean up resources
System.out.println("\nPress the Enter key to begin clean up");
System.console().readLine();
System.out.println("Deleting blob container...");
blobContainerClient.delete();
System.out.println("Deleting the local source and downloaded files...");
localFile.delete();
downloadedFile.delete();
System.out.println("Done");
欲了解更多資訊與範例,請參閱「用 Java 刪除並還原 blob 容器」。
執行程式碼
此應用程式會在本機資料夾中建立一個測試檔案,並將其上傳到 Blob 儲存體。 範例會接著列出容器中的 Blob,並下載具有新名稱的檔案,您便可比較舊檔案和新檔案。
請依照以下步驟編譯、打包並執行程式碼:
- 瀏覽至包含
pom.xml檔案的目錄,然後使用下列mvn命令來編譯專案:mvn compile - 以可散發格式封裝已編譯的程式碼:
mvn package - 執行下列
mvn命令以執行應用程式:
為了簡化執行步驟,請依以下程式碼新增mvn exec:java -D exec.mainClass=com.blobs.quickstart.App -D exec.cleanupDaemonThreads=falseexec-maven-pluginpom.xml並配置:
在此設定下,請以以下指令執行應用程式:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <mainClass>com.blobs.quickstart.App</mainClass> <cleanupDaemonThreads>false</cleanupDaemonThreads> </configuration> </plugin>mvn exec:java
應用程式的輸出類似於下列範例 (已針對可讀性省略 UUID 值):
Azure Blob Storage - Java quickstart sample
Uploading to Blob storage as blob:
https://mystorageacct.blob.core.windows.net/quickstartblobsUUID/quickstartUUID.txt
Listing blobs...
quickstartUUID.txt
Downloading blob to
./data/quickstartUUIDDOWNLOAD.txt
Press the Enter key to begin clean up
Deleting blob container...
Deleting the local source and downloaded files...
Done
在開始清除程序之前,請檢查 data 資料夾,找出這兩個檔案。 您可以比較這些檔案,並觀察它們是否相同。
清除資源
驗證檔案並完成測試後,按下 Enter 鍵刪除測試檔案以及你在儲存帳號中建立的容器。 您也可以使用 Azure CLI 來刪除資源。
快速啟動完成後,請執行以下指令清理你建立的資源:
azd down
你會收到確認刪除資源的提示。 輸入 y 以確認。