前端文件花式直传OSS!后端(那我走())
一. 简介
前端还在传文件给后端吗?你们的服务器扛得住吗?什么......老板砸钱加机器?!告辞!/狗头
前后端文件传输涉及数据较大,往往会成为很多项目的性能瓶颈。常见的传输方式也有不少,相对来说,OSS直传能够减轻很大压力。
本文我们来列举下常见的和oss直传的几种传输方式,并列举其优劣。
二. 常见方式
1. 表单上传
表单上传文件是最常见的方式,前后端开发小伙伴都很轻松,前端哐哐传,后端哐哐收就成了。其过程如下图所示。
文章图片
优势:
- 简单方便,开发量小
- 前后端原生支持,无需额外第三方库支持
Base64方式上传文件,多常见于小文件,如小图片等,前后端都可直接使用
String
类型发送和接收。不过在前端,需要将文件转成base64数据,不仅会增加些性能消耗,还会增加传输数据的体积。而对于后端,如果并不是想直接存储base64数据,也还需要将其转成文件再存储,也会增加后端的性能消耗。该上传方式可适用于
Resetful Api
,也可适用于文件的加密、回调接口携带文件等等。其过程如下图所示。文章图片
优势:
- 适用于
Resetful Api
,可用于加密、回调等场景,较为灵活
- 前后端文件与base64数据转换需要消耗性能
- 只适用于小文件
1. Browser.js SDK上传
该方案可在前端直接通过
browser.js
上传文件到OSS,可分成三步:- 前端使用SDK直传OSS
- 前端上传完成后请求后端,通知上传完成
- 后端检测OSS上该文件是否存在(可选)
文章图片
Browser.js
的方式需要前端安装阿里云的库ali-oss
,然后在前端调用。直传还需要OSS账户的Key和Secret,因此为了安全考虑,需要建立RAM账户,然后前端向后端先请求一个STS
临时访问凭证来完成直传,其流程如下图所示。文章图片
2. Javascript客户端签名直传
Javascript客户端签名直传,需要先从后端获取临时签名,其流程与上一步的
browser.js
方案大致相同,不同点在于:- 无需第三方库支持,直接表单上传
- 原生支持后端上传回调(下一步骤讲述)
文章图片
不过该方案做下来,我感觉最大的问题是权限配置有点麻烦....../泪眼
3. 服务端签名直传并设置上传回调
该方案其实是上面方案——Javascript客户端签名直传的升级版本,其加上了后端的上传回调功能。不错呦~
前端需要改动的很少,只需要在请求参数中加上
callback
参数即可,该参数为后端加密,在签名请求的响应中一起返回回来,内加密了后端回调接口。在前端直传完成后,后端回调接口将会接收到相关文件参数,包括文件路径、大小、类型等。最后OSS会将回调接口response转发给前端,响应直传OSS的请求。其流程如下图所示。
文章图片
四. 对比 传统方式相比直传OSS,相对来说有三个缺点:
- 上传慢:用户数据需先上传到应用服务器,之后再上传到OSS。网络传输时间比直传到OSS多一倍。如果用户数据不通过应用服务器中转,而是直传到OSS,速度将大大提升。而且OSS采用BGP带宽,能保证各地各运营商之间的传输速度。
- 扩展性差:如果后续用户多了,应用服务器会成为瓶颈。
- 费用高:需要准备多台应用服务器。由于OSS上传流量是免费的,如果数据直传到OSS,不通过应用服务器,那么将能省下几台应用服务器。
五. 参考文档
- Web端上传介绍
- JavaScript客户端签名直传
- 服务端签名直传并设置上传回调
- 我的博客
推荐阅读
- django-前后端交互
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 使用composer自动加载类文件
- Jsr303做前端数据校验
- ssh生成公钥秘钥
- 吃可爱长大的易烊千玺,一害羞就会耸肩,花式耸肩杀
- Android系统启动之init.rc文件解析过程
- 7、前端--jQuery简介、基本选择器、基本筛选器、属性选择器、表单选择器、筛选器方法、节点操作、绑定事件
- 前端代码|前端代码 返回顶部 backToTop
- 微信小程序基础知识