将文件上传到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.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    注意

    如果使用 Spring Boot 2.x,请确保将 spring-cloud-azure-dependencies 版本设置为 4.17.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 上传和读取文件,请使用以下步骤配置应用程序。

  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 使用 DefaultAzureCredentialAzure 标识库提供的帮助获取凭据,而无需进行任何代码更改。

    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 初学者的详细信息,请参阅 什么是 Spring Cloud Azure?

有关可从 Spring Boot 应用程序调用的其他 Azure 存储 API 的详细信息,请参阅以下文章: