Spring Boot 集成 Alibaba OSS

前言

本文主要介绍 Spring Boot 项目如何集成 Alibaba 的 OSS 服务(对象存储),教程内容同样适用于 Spring Cloud 项目。

提示

1、Spring Cloud 项目不建议继续使用 spring-cloud-starter-alicloud-oss 组件,尤其是较新版本的 Spring Cloud(例如 2021.0.1 版本),毕竟 Alibaba OSS 的官方文档也移除了该组件的使用说明。
2、Alibaba OSS 更多的使用教程请查看 官方文档

版本说明

Spring BootSpring Boot Alibaba
2.6.31.0.0

Maven 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.3</version>
<scope>import</scope>
<type>pom</type>
</dependency>

<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-spring-boot-dependencies</artifactId>
<version>1.0.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>

YAML 配置内容

在 Spring Boot 的 application.yml 文件中配置 Alibaba OSS 的 accessKeyIdsecretAccessKeyendpoint

1
2
3
4
5
6
alibaba:
cloud:
access-key: ***
secret-key: ***
oss:
endpoint: ***

Java 测试代码

运行下述代码之前,记得将 BUCKET_NAME 更改为你自己的存储桶的名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import com.aliyun.oss.OSSClient;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

@SpringBootTest
public class OssTest {

/**
* Bucket
*/
private static final String BUCKET_NAME = "your-bucket";

@Resource
private OSSClient ossClient;

/**
* 上传文件
*/
@Test
public void uploadFile() throws FileNotFoundException {
// 文件名称
String objectName = "upload.jpg";
// 文件路径
String filePath = "/tmp/images/upload.jpg";
// 文件上传
InputStream inputStream = new FileInputStream(filePath);
ossClient.putObject(BUCKET_NAME, objectName, inputStream);
}

}