将文件上传到 Azure Blob 存储
本教程介绍如何从 Spring Boot 应用程序上传 Azure Blob 存储帐户中的容器 Blob 并从中读取。
Azure Blob 存储是 Microsoft 提供的适用于云的对象存储解决方案。 Blob 存储最适合存储巨量的非结构化数据,例如文本或二进制数据。
先决条件
- Azure 订阅 - 免费创建订阅。
- Java 开发工具包 (JDK) 版本 8 或更高版本。
- Apache Maven 版本 3.0 或更高版本。
- 用来测试功能的 cURL 或类似的 HTTP 实用工具。
- Azure 存储帐户和容器。 如果你还没有存储帐户,请创建一个存储帐户。
- Spring Boot 应用程序。 如果没有,请使用 Spring Initializr 创建一个 Maven 项目。 请务必选择“Maven 项目”,并在“依赖项”下添加“Spring Web”依赖项,然后选择“Java 版本 8 或更高版本”。
注意
若要授予帐户对资源的访问权限,请在新创建的 Azure 存储帐户中,将 Storage Blob Data Contributor
角色分配给当前正在使用的 Microsoft Entra 帐户。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色。
重要
要完成本教程中的步骤,需要 Spring Boot 版本 2.5 或更高版本。
创建容器
首先,按照快速入门:使用 Azure 门户上传、下载和列出 Blob 中的说明创建一个名为 testcontainer
的容器。
从 Azure 存储帐户容器上传和读取 blob
有了 Azure 存储帐户和容器后,即可使用 Spring Cloud Azure 从 Blob 上传和读取文件。
要安装 Spring Cloud Azure Storage Blob Starter 模块,请将以下依赖项添加到 pom.xml 文件:
Spring Cloud Azure 物料清单 (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意
如果使用 Spring Boot 2.x,请确保将
spring-cloud-azure-dependencies
版本设置为4.19.0
。 此物料清单 (BOM) 应在 pom.xml 文件的<dependencyManagement>
部分进行配置。 这可确保所有 Spring Cloud Azure 依赖项都使用相同的版本。 有关用于此 BOM 的版本的详细信息,请参阅应使用哪个版本的 Spring Cloud Azure。Spring Cloud Azure Storage Blob Starter 项目:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-storage-blob</artifactId> </dependency>
编写应用程序代码
若要使用 Spring Cloud Azure Storage Blob starter 从 Blob 上传和读取文件,请使用以下步骤配置应用程序。
在 application.properties 配置文件中配置存储帐户名称和终结点,如以下示例所示。
spring.cloud.azure.storage.blob.account-name=${AZURE_STORAGE_ACCOUNT_NAME} spring.cloud.azure.storage.blob.endpoint=${AZURE_STORAGE_ACCOUNT_ENDPOINT}
创建一个新
BlobController
Java 类,如以下示例所示。 此类用于从 Azure 存储帐户中的容器 blob 上传和读取文件。package com.example.demo; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.core.io.WritableResource; import org.springframework.util.StreamUtils; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.Charset; @RestController @RequestMapping("blob") public class BlobController { @Value("azure-blob://testcontainer/test.txt") private Resource blobFile; @GetMapping("/readBlobFile") public String readBlobFile() throws IOException { return StreamUtils.copyToString( this.blobFile.getInputStream(), Charset.defaultCharset()); } @PostMapping("/writeBlobFile") public String writeBlobFile(@RequestBody String data) throws IOException { try (OutputStream os = ((WritableResource) this.blobFile).getOutputStream()) { os.write(data.getBytes()); } return "file was updated"; } }
提示
在本教程中,配置或代码中没有身份验证操作。 但连接到 Azure 服务需要进行身份验证。 要完成身份验证,需要使用 Azure 标识。 Spring Cloud Azure 使用 Azure 标识库提供的
DefaultAzureCredential
来帮助获取凭据,而无需更改任何代码。DefaultAzureCredential
支持多种身份验证方法,并确定应在运行时使用哪种方法。 通过这种方法,你的应用可在不同环境(例如本地与生产环境)中使用不同的身份验证方法,而无需实现特定于环境的代码。 有关详细信息,请参阅 DefaultAzureCredential。若要在本地开发环境中完成身份验证,可以使用 Azure CLI、Visual Studio Code、PowerShell 或其他方法。 有关详细信息,请参阅 Java 开发环境中的 Azure 身份验证。 若要在 Azure 托管环境中完成身份验证,建议使用用户分配的托管标识。 有关详细信息,请参阅什么是 Azure 资源的托管标识?
应用程序运行后,使用
curl
按照以下步骤测试应用程序。使用以下命令发送 POST 请求以更新文件的内容:
curl http://localhost:8080/blob/writeBlobFile -d "new message" -H "Content-Type: text/plain"
你可以看到显示
file was updated
的响应。使用以下命令发送 GET 请求以验证文件的内容:
curl -X GET http://localhost:8080/blob/readBlobFile
应该会看到发布的“新消息”文本。
部署到 Azure Spring Apps
现在,你已在本地运行 Spring Boot 应用程序,是时候将其转移到生产环境了。 借助 Azure Spring Apps,可以轻松地将 Spring Boot 应用程序部署到 Azure,不需更改任何代码。 该服务管理 Spring 应用程序的基础结构,让开发人员可以专注于代码。 Azure Spring Apps 可以通过以下方法提供生命周期管理:综合性监视和诊断、配置管理、服务发现、CI/CD 集成、蓝绿部署等。 若要将应用程序部署到 Azure Spring Apps,请参阅在 Azure Spring Apps 中部署你的第一个应用程序。
后续步骤
若要了解有关 Spring 和 Azure 的详细信息,请继续访问“Azure 上的 Spring”文档中心。
另请参阅
有关可用于 Microsoft Azure 的其他 Spring Boot Starters 的更多信息,请参阅什么是 Spring Cloud Azure?
有关可从 Spring Boot 应用程序调用的其他 Azure 存储 API 的详细信息,请参阅以下文章: