将文件上传到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 或更高版本。
创建容器
首先,按照快速入门中的说明创建一testcontainer
个名为的容器:使用Azure 门户上传、下载和列出 blob。
从 Azure 存储 帐户容器上传和读取 blob
有了Azure 存储帐户和容器后,即可使用 Spring Cloud Azure 从 Blob 上传和读取文件。
若要安装 Spring Cloud Azure 存储 Blob 初学者模块,请将以下依赖项添加到pom.xml文件中:
Spring Cloud Azure 材料清单(BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.16.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 存储 Blob 初学者项目:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-storage-blob</artifactId> </dependency>
编写应用程序代码
若要使用 Spring Cloud Azure 存储 Blob 初学者从 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 使用
DefaultAzureCredential
Azure 标识库提供的帮助获取凭据,而无需进行任何代码更改。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 初学者的详细信息,请参阅 什么是 Spring Cloud Azure?
有关可从 Spring Boot 应用程序调用的其他 Azure 存储 API 的详细信息,请参阅以下文章: