「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战」。
前言
附件上传相信大家都了解的,整合阿里云OSS对象存储时踩了点小坑。这里记录正确整合步骤,方便以后快速整合。官方文档,感兴趣大家可以自行阅读,这里不赘述了。
附件上传
常见的上传逻辑应该是,Web端上传文件到应用服务器,应用服务器再把文件上传到OSS。具体流程如下图所示。
但是这种方案存在以下缺点:
- 速度慢,经过两道传输,时间起码增加一倍
- 浪费性能,万一用户群体变大,服务器将成为我们的瓶颈
最佳方案 客户端签名直传
由于OSS上行流量是免费的,如果数据直传到OSS,速度会大幅缩减,并且节约了服务器资源,缓解了服务端压力。
- 用户向应用服务器请求上传Policy。
- 应用服务器返回上传Policy和签名给用户。
- 用户直接向OSS发送文件上传请求。
整合步骤
1. 开通阿里云OSS对象存储服务
这个就不介绍了,登录阿里云平台,跟着引导操作就行
2. 获取以下四个参数信息
- endpoint
- accessKeyId
- accessKeySecret
- bucketName
- endpoint*
点击Bucket列表 –> 新建Bucket –> 填好bucket名称 –> 选择地域 –> 根据地域不同会给出不同的endpoint
到这里我们已经有了bucketName、 endpoint
如果忘记了可以在以下路径查找
accessKeyId和accessKeySecret
点击右上角账户头像 –> 点击AccessKey管理
通过创建子账号的方式创建一个只有
OSS相关权限的用户
创建用户
创建accesskey,生成完一定要记录下来,页面关掉就只能重新生成了
给用户添加权限
添加读写权限
到这里所有准备工作就完成了,接下来代码整合
SpringBoot代码整合
1. 引入依赖
| 1 | xml复制代码<!-- 阿里云oss存储 --> | 
2. 配置文件定义属性值
application.yml中添加配置属性
| 1 | yml复制代码# 阿里云oss | 
3. 添加配置对象
自动配置OSSClient对象
| 1 | java复制代码@Component | 
4. 编写获取policy接口
| 1 | java复制代码@RestController | 
到这里服务端的工作就完成了
5. 测试
调用获取policy接口返回
| 1 | json复制代码{ | 
| 字段 | 描述 | 
|---|---|
| accessid | 用户请求的AccessKey ID。 | 
| host | 用户发送上传请求的域名。 | 
| policy | 用户表单上传的策略(Policy),Policy为经过Base64编码过的字符串。详情请参见Post Policy。 | 
| signature | 对Policy签名后的字符串。详情请参见Post Signature。 | 
| expire | 由服务器端指定的Policy过期时间,格式为Unix时间戳(自UTC时间1970年01月01号开始的秒数)。 | 
| dir | 限制上传的文件前缀。 | 
本文转载自: 掘金