将文件上传到 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.19.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 上传和读取文件,请使用以下步骤配置应用程序。

  1. application.properties 配置文件中配置存储帐户名称和终结点,如以下示例所示。

    spring.cloud.azure.storage.blob.account-name=${AZURE_STORAGE_ACCOUNT_NAME}
    spring.cloud.azure.storage.blob.endpoint=${AZURE_STORAGE_ACCOUNT_ENDPOINT}
    
  2. 创建一个新 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 资源的托管标识?

  3. 应用程序运行后,使用 curl 按照以下步骤测试应用程序。

    1. 使用以下命令发送 POST 请求以更新文件的内容:

      curl http://localhost:8080/blob/writeBlobFile -d "new message" -H "Content-Type: text/plain"
      

      你可以看到显示 file was updated 的响应。

    2. 使用以下命令发送 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 的详细信息,请参阅以下文章: