We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
前端还在传文件给后端吗?你们的服务器扛得住吗?什么......老板砸钱加机器?!告辞!/狗头
前后端文件传输涉及数据较大,往往会成为很多项目的性能瓶颈。常见的传输方式也有不少,相对来说,OSS直传能够减轻很大压力。
本文我们来列举下常见的和oss直传的几种传输方式,并列举其优劣。
表单上传文件是最常见的方式,前后端开发小伙伴都很轻松,前端哐哐传,后端哐哐收就成了。其过程如下图所示。
优势:
Base64方式上传文件,多常见于小文件,如小图片等,前后端都可直接使用String类型发送和接收。不过在前端,需要将文件转成base64数据,不仅会增加些性能消耗,还会增加传输数据的体积。而对于后端,如果并不是想直接存储base64数据,也还需要将其转成文件再存储,也会增加后端的性能消耗。
String
该上传方式可适用于Resetful Api,也可适用于文件的加密、回调接口携带文件等等。其过程如下图所示。
Resetful Api
劣势:
此处的OSS直传方案都是使用的阿里云的OSS产品,以下将介绍三个方案,可适用于不同的场景。
该方案可在前端直接通过browser.js上传文件到OSS,可分成三步:
browser.js
其流程如下图所示。
Browser.js的方式需要前端安装阿里云的库ali-oss,然后在前端调用。直传还需要OSS账户的Key和Secret,因此为了安全考虑,需要建立RAM账户,然后前端向后端先请求一个STS临时访问凭证来完成直传,其流程如下图所示。
Browser.js
ali-oss
STS
Javascript客户端签名直传,需要先从后端获取临时签名,其流程与上一步的browser.js方案大致相同,不同点在于:
不过该方案做下来,我感觉最大的问题是权限配置有点麻烦....../泪眼
该方案其实是上面方案——Javascript客户端签名直传的升级版本,其加上了后端的上传回调功能。不错呦~
前端需要改动的很少,只需要在请求参数中加上callback参数即可,该参数为后端加密,在签名请求的响应中一起返回回来,内加密了后端回调接口。在前端直传完成后,后端回调接口将会接收到相关文件参数,包括文件路径、大小、类型等。最后OSS会将回调接口response转发给前端,响应直传OSS的请求。
callback
传统方式相比直传OSS,相对来说有三个缺点:
当然,对于规模较小、成本较低的项目来说,常见的上传方式还是适合的,毕竟没有最好的,只有最适合的。
Web端上传介绍
JavaScript客户端签名直传
服务端签名直传并设置上传回调
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一. 简介
前端还在传文件给后端吗?你们的服务器扛得住吗?什么......老板砸钱加机器?!告辞!/狗头
前后端文件传输涉及数据较大,往往会成为很多项目的性能瓶颈。常见的传输方式也有不少,相对来说,OSS直传能够减轻很大压力。
本文我们来列举下常见的和oss直传的几种传输方式,并列举其优劣。
二. 常见方式
1. 表单上传
表单上传文件是最常见的方式,前后端开发小伙伴都很轻松,前端哐哐传,后端哐哐收就成了。其过程如下图所示。
优势:
2. Base64上传
Base64方式上传文件,多常见于小文件,如小图片等,前后端都可直接使用
String
类型发送和接收。不过在前端,需要将文件转成base64数据,不仅会增加些性能消耗,还会增加传输数据的体积。而对于后端,如果并不是想直接存储base64数据,也还需要将其转成文件再存储,也会增加后端的性能消耗。该上传方式可适用于
Resetful Api
,也可适用于文件的加密、回调接口携带文件等等。其过程如下图所示。优势:
Resetful Api
,可用于加密、回调等场景,较为灵活劣势:
三. OSS直传
此处的OSS直传方案都是使用的阿里云的OSS产品,以下将介绍三个方案,可适用于不同的场景。
1. Browser.js SDK上传
该方案可在前端直接通过
browser.js
上传文件到OSS,可分成三步:其流程如下图所示。
Browser.js
的方式需要前端安装阿里云的库ali-oss
,然后在前端调用。直传还需要OSS账户的Key和Secret,因此为了安全考虑,需要建立RAM账户,然后前端向后端先请求一个STS
临时访问凭证来完成直传,其流程如下图所示。2. Javascript客户端签名直传
Javascript客户端签名直传,需要先从后端获取临时签名,其流程与上一步的
browser.js
方案大致相同,不同点在于:其流程如下图所示。
不过该方案做下来,我感觉最大的问题是权限配置有点麻烦....../泪眼
3. 服务端签名直传并设置上传回调
该方案其实是上面方案——Javascript客户端签名直传的升级版本,其加上了后端的上传回调功能。不错呦~
前端需要改动的很少,只需要在请求参数中加上
callback
参数即可,该参数为后端加密,在签名请求的响应中一起返回回来,内加密了后端回调接口。在前端直传完成后,后端回调接口将会接收到相关文件参数,包括文件路径、大小、类型等。最后OSS会将回调接口response转发给前端,响应直传OSS的请求。其流程如下图所示。
四. 对比
传统方式相比直传OSS,相对来说有三个缺点:
当然,对于规模较小、成本较低的项目来说,常见的上传方式还是适合的,毕竟没有最好的,只有最适合的。
五. 参考文档
Web端上传介绍
JavaScript客户端签名直传
服务端签名直传并设置上传回调
The text was updated successfully, but these errors were encountered: