阿里云OSS

  1. 开通服务
    需要登录阿里云官网,并访问对象存储 OSS 产品首页:https://www.aliyun.com/product/oss ,如下图所示,点击立即开通按钮,开通服务
    Loading
    开通成功后,进入到对象存储 OSS 控制台, 点击 Bucket 列表,在 Bucket 列表中,点击上方的创建 Bucket 按钮,准备创建桶,填写 Bucket 相关配置项,如下:
    Loading
  • 模式选择:勾选自定义创建;
  • Bucket 名称:
  • 地域:推荐选择离你产品使用者较近的地方,有助于提升访问速度。
  • 阻止公共访问:关闭掉,并将读写权限修改为公共读;
  1. 获取 AccessKey 接入凭证
    通过代码上传文件到 Bucket ,阿里云需要校验你的身份,还需要获取一下接入凭证。点击回到阿里云首页,将鼠标移动到登录用户的头像上,即可看到 AccessKey 选项,点击即可查看
    将你的 AccessKeyID 以及 AccessKey Secret 复制出来

编辑模块的 application-dev.yml 开发环境配置,修改一下 minio 配置项的结构,统一放置到 storage 节点下,方便统一维护。再额外加一下阿里云 OSS 需要用到的配置项,如下:

1
2
3
4
5
6
7
8
9
10
11
12
#=================================================================
# 对象存储配置
#=================================================================
storage:
minio:
endpoint: http://127.0.0.1:9000
accessKey: xxx
secretKey: xxx
aliyun-oss:
endpoint: oss-cn-hangzhou.aliyuncs.com # 改成你自己的
accessKey: xxx # 改成你自己的
secretKey: xxx # 改成你自己的
  1. 添加阿里云OSS配置类
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
@ConfigurationProperties(prefix = "storage.aliyun-oss")
@Component
@Data
public class AliyunOSSProperties {
private String endpoint;
private String accessKey;
private String secretKey;
}```

添加依赖
```java
<!-- 阿里云 OSS -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>

<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>

阿里云配置类

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@Configuration
public class AliyunOSSConfig {

@Resource
private AliyunOSSProperties aliyunOSSProperties;

/**
* 构建 阿里云 OSS 客户端
*
* @return
*/
@Bean
public OSS aliyunOSSClient() {
// 设置访问凭证
DefaultCredentialProvider credentialsProvider = CredentialsProviderFactory.newDefaultCredentialProvider(
aliyunOSSProperties.getAccessKey(), aliyunOSSProperties.getSecretKey());

// 创建 OSSClient 实例
return new OSSClientBuilder().build(aliyunOSSProperties.getEndpoint(), credentialsProvider);
}
}```

阿里云策略实现类
```java
@Slf4j
public class AliyunOSSFileStrategy implements FileStrategy {

@Resource
private AliyunOSSProperties aliyunOSSProperties;

@Resource
private OSS ossClient;

@Override
@SneakyThrows
public String uploadFile(MultipartFile file, String bucketName) {
log.info("## 上传文件至阿里云 OSS ...");

// 判断文件是否为空
if (file == null || file.getSize() == 0) {
log.error("==> 上传文件异常:文件大小为空 ...");
throw new RuntimeException("文件大小不能为空");
}

// 文件的原始名称
String originalFileName = file.getOriginalFilename();

// 生成存储对象的名称(将 UUID 字符串中的 - 替换成空字符串)
String key = UUID.randomUUID().toString().replace("-", "");
// 获取文件的后缀,如 .jpg
String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));

// 拼接上文件后缀,即为要存储的文件名
String objectName = String.format("%s%s", key, suffix);

log.info("==> 开始上传文件至阿里云 OSS, ObjectName: {}", objectName);

// 上传文件至阿里云 OSS
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(file.getInputStream().readAllBytes()));

// 返回文件的访问链接
String url = String.format("https://%s.%s/%s", bucketName, aliyunOSSProperties.getEndpoint(), objectName);
log.info("==> 上传文件至阿里云 OSS 成功,访问路径: {}", url);
return url;
}
}

阿里云OSS
http://bloomivy.github.io/2025/01/22/阿里云OSS/
作者
Bloom
发布于
2025年1月22日
许可协议