Spring Cloud Azure 資源處理
本文適用于: ✔️版本 4.14.0 ✔️ 5.8.0
Spring 專案提供 Spring Resources 抽象概念,以存取一些低階資源。 專案提供 、 ResourceLoader
和 ResourcePatternResolver
等 Resource
介面。 Spring Cloud Azure 會針對 Azure 儲存體 服務實作這些介面,可讓您使用 Spring 程式設計模型與 Azure 儲存體 Blob 和檔案共用互動。 Spring Cloud Azure 提供 spring-cloud-azure-starter-storage-blob
和 spring-cloud-azure-starter-storage-file-share
來自動設定 blob 和 Azure 儲存體 檔案共用Azure 儲存體。
下表列出Azure 儲存體相關連結庫:
入門 | 服務 | 描述 |
---|---|---|
spring-cloud-azure-starter-storage-blob | Azure 儲存體 Blob | 允許在區塊 Blob 中大規模儲存和存取非結構化資料。 |
spring-cloud-azure-starter-storage-file-share | Azure 儲存體檔案共用 | 提供完全受控的雲端檔案共用,您可以透過業界標準伺服器訊息區 (SMB) 通訊協定從任何地方存取。 |
相依性設定
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-file-share</artifactId>
</dependency>
</dependencies>
spring-cloud-azure-starter-storage-blob
只有在您使用 Azure 儲存體 Blob 時,才需要相依性。
spring-cloud-azure-starter-storage-file-share
只有在您使用 Azure 儲存體 檔案共用時,才需要相依性。
提示
我們也提供支援 spring-cloud-azure-starter-storage
儲存體的所有功能。 如果您選擇使用它, spring.cloud.azure.storage.enable
是要設定的屬性,而預設值為 true 。 然後 spring.cloud.azure.storage.<storage-service>.enable
,您可以使用 來停用不需要的服務。
組態
注意
如果您使用安全性主體向 Microsoft Entra ID 進行驗證和授權,以存取 Azure 資源,請確定安全性主體已獲得足夠的許可權來存取 Azure 資源。 如需詳細資訊,請參閱 使用 Microsoft Entra ID 授權存取權。
下表列出 的 spring-cloud-azure-starter-storage-blob
可設定屬性:
屬性 | 預設 | 描述 |
---|---|---|
spring.cloud.azure.storage.blob.enabled | true | 值,指出是否啟用Azure Blob 儲存體服務。 |
spring.cloud.azure.storage.blob.endpoint | 要連線到Azure Blob 儲存體的 URI。 | |
spring.cloud.azure.storage.blob.account-key | 要連線到Azure Blob 儲存體的私密金鑰。 | |
spring.cloud.azure.storage.blob.account-name | Azure 儲存體 Blob 帳戶名稱。 |
下表列出 的 spring-cloud-azure-starter-storage-file-share
可設定屬性:
屬性 | 預設 | 描述 |
---|---|---|
spring.cloud.azure.storage.fileshare.enabled | true | 值,指出是否啟用 Azure 檔案儲存體服務。 |
spring.cloud.azure.storage.fileshare.endpoint | 連線至 Azure 檔案儲存體的 URI。 | |
spring.cloud.azure.storage.fileshare.account-key | 連線至 Azure 檔案儲存體的私密金鑰。 | |
spring.cloud.azure.storage.fileshare.account-name | Azure 儲存體檔案共用帳戶名稱。 |
基本使用方式
將下列屬性新增至 application.yml 檔案:
spring:
cloud:
azure:
storage:
blob:
account-name: ${STORAGE_ACCOUNT_NAME}
account-key: ${STORAGE_ACCOUNT_KEY}
endpoint: ${STORAGE_BLOB_ENDPOINT}
fileshare:
account-name: ${STORAGE_ACCOUNT_NAME}
account-key: ${STORAGE_ACCOUNT_KEY}
endpoint: ${STORAGE_FILESHARE_ENDPOINT}
取得資源
使用 取得資源 @Value
您可以使用 的注釋 @Value("azure-blob://[your-container-name]/[your-blob-name]")
來自動連接 Blob 資源,如下列範例所示:
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
您可以使用 的注釋 @Value("azure-file://[your-fileshare-name]/[your-file-name]")
來自動連接檔資源,如下列範例所示:
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
使用 ResourceLoader 取得資源
@Autowired
private ResourceLoader resourceLoader;
...
// Get a BlobResource.
Resource storageBlobResource = resourceLoader.getResource("azure-blob://[your-container-name]/[your-blob-name]");
// Get a FileResource.
Resource storageFileResource = resourceLoader.getResource("azure-file://[your-fileshare-name]/[your-file-name]");
藉由搜尋模式取得資源
您可以使用 的 ResourcePatternResolver
實作類別來搜尋資源。 使用 AzureStorageBlobProtocolResolver
來搜尋 blob
資源和 AzureStorageFileProtocolResolver
搜尋 file
資源。
針對模式搜尋,
searchPattern
應該從azure-blob://
或azure-file://
開始。 例如,azure-blob://**/**
表示列出所有容器中的所有 Blob,以及azure-blob://demo-container/**
表示列出容器中的所有demo-container
Blob,包括任何子資料夾。針對位置搜尋,
searchLocation
應該以 或azure-file://
開頭azure-blob://
,而剩餘的檔案路徑應該存在,否則會擲回例外狀況。
@Autowired
private AzureStorageBlobProtocolResolver azureStorageBlobProtocolResolver;
@Autowired
private AzureStorageFileProtocolResolver azureStorageFileProtocolResolver;
// Get all text blobs.
Resource[] blobTextResources = azureStorageBlobProtocolResolver.getResources("azure-blob://[container-pattern]/*.txt");
// Get all text files.
Resource[] fileTextResources = azureStorageFileProtocolResolver.getResources("azure-file://[fileshare-pattern]/*.txt");
使用資源處理
從特定資源下載資料
您可以使用 的 方法 Resource
,從 Azure 儲存體 Blob 或檔案共用 getInputStream()
下載資源。
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
//...
// Download data as a stream from a blob resource.
InputStream inputblobStream = storageBlobResource.getInputStream();
// Download data as a stream from a file resource.
InputStream inputfileStream = storageFileResource.getInputStream();
將資料上傳至特定資源
您可以將 Spring 轉換成 ,以將資源 Resource
WritableResource
上傳至 Azure Blob 或檔案儲存體,如下列範例所示:
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
String data = "sampledata";
// Upload string data to a blob.
try (OutputStream blobos = ((WritableResource) this.storageBlobResource).getOutputStream()) {
blobos.write(data.getBytes());
}
// Upload string data to a file.
try (OutputStream fileos = ((WritableResource) this.storageFileResource).getOutputStream()) {
fileos.write(data.getBytes());
}
多部分上傳
大於 4 MiB 的檔案將會以平行方式上傳至Azure 儲存體。
範例
請參閱 GitHub 上的 storage-blob-sample 和 storage-file-sample 存放庫。