共用方式為


Spring Cloud Azure 資源處理

本文適用於:✅ 4.19.0 ✅ 5.19.0 版

Spring 專案提供 Spring Resources 抽象概念,以存取一些低階資源。 專案提供介面,例如 ResourceResourceLoaderResourcePatternResolver。 Spring Cloud Azure 會實作 Azure 記憶體服務的這些介面,可讓您使用 Spring 程式設計模型與 Azure 記憶體 Blob 和檔案共享互動。 Spring Cloud Azure 提供 spring-cloud-azure-starter-storage-blobspring-cloud-azure-starter-storage-file-share 來自動設定 Azure 記憶體 Blob 和 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>

只有在您使用 Azure 記憶體 Blob 時,才需要 spring-cloud-azure-starter-storage-blob 相依性。

只有在您使用 Azure 記憶體檔案共享時,才需要 spring-cloud-azure-starter-storage-file-share 相依性。

提示

我們也提供 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 值,指出是否啟用 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 值,指出是否啟用 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-blob://azure-file:// 開頭,而剩餘的檔案路徑應該存在,否則會擲回例外狀況。

@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");

使用資源處理

從特定資源下載數據

您可以使用 getInputStream()Resource 方法,從 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;

//...

// 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-samplestorage-file-sample 存放庫。