以下是 spring boot 对接阿里云 oss 的详细步骤和流程,结合官方网页和最佳实践整理而成:
一、准备工作
注册阿里云账号
- 访问阿里云官网完成注册和实名认证。
开通 oss 服务
- 登录阿里云控制台 → 进入 oss 服务 → 开通对象存储 oss。
创建 bucket
- 进入 oss 控制台 → 点击「创建 bucket」→ 填写名称(如
my-bucket)、地域(如华北2北京)→ 存储类型选择「标准存储」→ 权限选择「私有」。
获取 accesskey
- 进入「accesskey 管理」→ 创建 ram 子用户(推荐)→ 保存
accesskey id和accesskey secret。
二、spring boot 项目配置
1. 添加依赖
在 pom.xml 中添加 oss sdk 和 web 依赖:
<dependency>
<groupid>com.aliyun.oss</groupid>
<artifactid>aliyun-sdk-oss</artifactid>
<version>3.17.0</version> <!-- 使用最新稳定版本 -->
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
注意:若使用 java 11+,需添加 jaxb 依赖:
<dependency>
<groupid>org.glassfish.jaxb</groupid>
<artifactid>jaxb-runtime</artifactid>
<version>3.0.2</version>
</dependency>
2. 配置 oss 参数
在 application.yml 中配置:
aliyun:
oss:
endpoint: oss-cn-beijing.aliyuncs.com # bucket 所在地域的 endpoint
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
bucket-name: your-bucket-name
max-file-size: 10mb # 最大文件限制(可选)
allowed-extensions: jpg,jpeg,png,pdf # 允许的文件类型(可选)
3. 创建配置类
通过 @configurationproperties 读取配置并初始化 ossclient:
@configuration
@configurationproperties(prefix = "aliyun.oss")
@data
public class ossconfig {
private string endpoint;
private string accesskeyid;
private string accesskeysecret;
private string bucketname;
}
@component
public class ossclientfactory {
@autowired
private ossconfig ossconfig;
private oss ossclient;
@postconstruct
public void init() {
ossclient = new ossclientbuilder().build(
ossconfig.getendpoint(),
ossconfig.getaccesskeyid(),
ossconfig.getaccesskeysecret()
);
}
@predestroy
public void shutdown() {
if (ossclient != null) {
ossclient.shutdown();
}
}
}
三、实现文件上传功能
1. 文件上传服务类
@service
@requiredargsconstructor
public class ossservice {
private final ossconfig ossconfig;
private final ossclientfactory ossclientfactory;
public string uploadfile(multipartfile file) {
// 校验文件
validatefile(file);
// 生成唯一文件名(避免重复)
string filename = uuid.randomuuid().tostring() + "_" + file.getoriginalfilename();
try (inputstream inputstream = file.getinputstream()) {
// 上传到 oss
ossclientfactory.getossclient().putobject(
ossconfig.getbucketname(),
filename,
inputstream
);
// 生成访问 url
return generateaccessurl(filename);
} catch (ioexception e) {
throw new runtimeexception("文件上传失败", e);
}
}
private string generateaccessurl(string filename) {
date expiration = new date(system.currenttimemillis() + 3600 * 1000); // url 有效期 1 小时
return ossclientfactory.getossclient().generatepresignedurl(
ossconfig.getbucketname(),
filename,
expiration
).tostring();
}
private void validatefile(multipartfile file) {
// 校验文件大小
if (file.getsize() > parsesize(ossconfig.getmaxfilesize())) {
throw new runtimeexception("文件大小超过限制");
}
// 校验文件类型
string extension = filenameutils.getextension(file.getoriginalfilename()).tolowercase();
if (!arrays.aslist(ossconfig.getallowedextensions().split(",")).contains(extension)) {
throw new runtimeexception("不支持的文件类型");
}
}
private long parsesize(string size) {
// 解析如 "10mb" 为字节单位
// 实现略...
}
}
2. 控制器层
@restcontroller
@requestmapping("/api/oss")
@requiredargsconstructor
public class osscontroller {
private final ossservice ossservice;
@postmapping("/upload")
public responseentity<string> uploadfile(@requestparam("file") multipartfile file) {
string url = ossservice.uploadfile(file);
return responseentity.ok(url);
}
}
四、测试与部署
本地测试
- 使用 postman 发送 post 请求到
/api/oss/upload,选择文件上传。 - 返回的 url 即为 oss 中文件的访问地址。
部署注意事项
- 安全建议:避免硬编码 accesskey,推荐使用 ram 子用户和 sts 临时凭证。
- 性能优化:大文件建议使用分片上传(
multipartupload)。 - 存储类型:根据访问频率选择标准存储、低频存储或归档存储。
五、扩展功能
文件下载
public void downloadfile(string filename, string localpath) {
ossclientfactory.getossclient().getobject(
new getobjectrequest(ossconfig.getbucketname(), filename),
new file(localpath)
);
}
文件删除
public void deletefile(string filename) {
ossclientfactory.getossclient().deleteobject(
ossconfig.getbucketname(),
filename
);
}
图片处理
// 添加水印
generatepresignedurlrequest request = new generatepresignedurlrequest(bucketname, filename);
request.addresponseheader("x-oss-process", "image/watermark,image_ahr0cdovl3npb2fsq0hjtmv3uziwmjmxmda1,size_20,text_qduxq1rpq0hjtmv3uziwmjmxmda1001");
url url = ossclient.generatepresignedurl(request);
六、常见问题
accesskey 权限不足
- 检查 ram 子用户是否已授权 oss 的
oss:putobject等权限。
文件上传失败
- 检查 bucket 是否存在、网络是否连通、文件大小是否超出限制。
url 无法访问
- 确认 bucket 的读写权限是否为「私有」时需使用签名 url。
通过以上步骤,即可实现 spring boot 与阿里云 oss 的完整对接。如需进一步优化,可参考阿里云 oss 官方网页。
以上就是springboot对接阿里云oss的详细步骤和流程的详细内容,更多关于springboot对接阿里云oss的资料请关注代码网其它相关文章!
发表评论