目的是让’前端统治世界’,哈哈哈哈!!!人家开个玩笑啦啦啦。其实目前上传有以下缺点:
- 第一 :上传慢。先上传到应用服务器,再上传到OSS,网络传送多了一倍。如果数据直传到OSS,不走应用服务器,速度将大大提升,而且OSS是采用BGP带宽,能保证各地各运营商的速度;
- 第二 :扩展性不好。如果后续用户多了,应用服务器会成为瓶颈;
- 深度整合 :费用高。由于OSS上传流量是免费的。如果数据直传到OSS,不走应用服务器,那么将能省下几台应用服务器。
阿里云直传流程
1:请求 STS 授权,并且缓存其返回信息;
2:计算文件 MD5 ;
3:构造阿里云直传需要的参数;
4:进行判断图片在库是否存在;如果存在请看 5
,如果不存在请看 6
;
5:资源存在,如果是图片
可以请求阿里云获得图片资源信息;
6:开始上传,上传成功后,如果是图片
可以请求阿里云获得图片资源信息;
7:上传失败,判断是否是 403 Forbidden
错误,如果是,返回 1;其他错误,自己处理。
废话不多说,上代码:
得到文件名后缀
1 | const getSuffix = (filename)=> { |
得到图片 MD5 方法
1 | const calculateImageMD5 = (params, handleCb)=> { |
STS 请求 伪代码
1 | const stsReuest =>(params) { |
阿里云直传 伪代码 – 包含判断图片是否重复
1 | function uploadForALiYun(param, filename, handleCb) { |
注意:如果检测
图片重复
接口出现404 Not Found
,可能 HTTP Cache 机制导致的,建议直接加个标识:
let imageALiPath = ‘http://‘ + utils.aLiUploadUrl + ‘/‘ + utils.aLiUploadDir + filename+ '?(time=)'+new Date().getTime();
得到图片信息,并且返回
1 | function getImageInfo(imageALiPath,handleCb){ |
注意:如果请求
上传
接口出现400 Bad Request
,可能是参数顺序有误,可以参考下图参数顺序。
反馈与建议
- 微信:其实我是不会告诉你的!!!
- 邮箱:xf_life@yeah.net
感谢阅读这份帮助文档。