以下是 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的资料请关注代码网其它相关文章!
发表评论