Spring Cloud Azure 资源处理
本文适用于: ✔️版本 4.14.0 ✔️ 版本 5.8.0
Spring 项目提供了一个 Spring Resources 抽象,用于访问许多低级别资源。 该项目提供类似 Resource
和 ResourceLoader
ResourcePatternResolver
. Spring Cloud Azure 为 Azure 存储 服务实现这些接口,使你能够使用 Spring 编程模型与 Azure 存储 Blob 和文件共享进行交互。 Spring Cloud Azure 提供spring-cloud-azure-starter-storage-blob
并spring-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>
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
的属性:
properties | 默认 | 说明 |
---|---|---|
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
的属性:
properties | 默认 | 说明 |
---|---|---|
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/**
列出容器中的所有 Blobdemo-container
,包括任何子文件夹。对于位置搜索,
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");
使用资源进行处理
从特定资源下载数据
可以使用以下方法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 或文件存储将资源上传到 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 存储库。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈