最近的一个项目在上传图片的时候速度非常慢,现有的上传方案是:图片发送到服务器,有服务器往oss里面写。但是实际的效果非常糟糕,7兆的文件需要传输大约40秒,这个用户体验就非常差。既然是基于oss的存储,那么可以完全不用经过服务器,直接上传到oss。
阿里云官方也给了个文档:https://help.aliyun.com/zh/oss/use-cases/python-1?spm=a2c4g.11186623.0.0.52371f40YvOysR 但是,阿里云的文档不得不说,实在是太乱了。看的蛋疼,搜到导的文档也是各种乱。按照手工配置可以一步步的进行。
1.创建子账号accesskey 和secret:
权限只需要给要上传的oss权限即可:
{ "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:PutObject", "oss:GetObjectAcl" ], "Resource": "acs:oss:*:*:direct-upload/*" } ], "Version": "1" }
2.修改appserver.py添加key和secret:
# 请填写您的AccessKeyId。 access_key_id = 'LTAI4GH2' # 请填写您的AccessKeySecret。 access_key_secret = 'IBUC' # host的格式为 bucketname.endpoint ,请替换为您的真实信息。 host = 'http://direct-upload.oss-cn-hangzhou.aliyuncs.com' # callback_url为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。 callback_url = "http://88.88.88.88:8888" # 用户上传文件时指定的前缀。 upload_dir = 'user-dir-prefix/' expire_time = 30
3.修改上传代码的pload.js,修改服务器地址:
if (xmlhttp!=null) { // serverUrl是 用户获取 '签名和Policy' 等信息的应用服务器的URL,请将下面的IP和Port配置为您自己的真实信息。 serverUrl = 'http://221.98.42.214:10087' xmlhttp.open( "GET", serverUrl, false ); xmlhttp.send( null ); return xmlhttp.responseText }
4.安装python运行库:
python2: pip install M2Crypto # python2 需要安装swig,如果没有安装通过 yum install swig安装 同时需要安装openssl开发库 yum install openssl-devel python3: pip install pycrypto # python3
5.运行服务端,打开上传页面上传,此时会得到一个很蛋疼的错误:
Error xml:<?xml version="1.0" encoding="UTF-8"?> <Error> <Code>AccessDenied</Code> <Message>Invalid according to Policy: Policy expired.</Message> <RequestId>64D3662C07D4B9333016A568</RequestId> <HostId>dongtou-direct-upload.oss-cn-hangzhou.aliyuncs.com</HostId> <EC>0006-00000213</EC> </Error>
嗯?刚开始还以为是我的配置问题,直到后来看了下代码:
def get_token(): now = int(time.time()) expire_syncpoint = now + expire_time expire_syncpoint = 1612345678 # 这一行代码还真是秀啊,有效的阻止了 白嫖党 expire = get_iso_8601(expire_syncpoint)
注释掉这行就ok了。
现在上传18兆文件,大约20秒左右。效率确实基本ok了
10 comments
你快别宣传了,阿里云OSS好贵的说,外链一定要用CDN做回源,不然更贵!
哈哈,不是宣传,公司项目。就是折腾这个破玩儿费劲,分享下经验而已。
如果私人用,那当然是不建议直接用啦。
哈哈哈,我怀疑你看错字了。我写的是直传,直传,直传,不是宣传啊喂~
我想了半天,这也不是多音字啊
就是,我怀疑他就是老花眼。所以我加了个拼音,哈哈哈。照顾老弱病残孕。
这个感觉用不起呵。
嗯嗯,个人项目最好不要用。存储计费,流量计费,价格还是比较高的。
要效率,就该如此
上一个用的大哥现在站点后半夜直接维护。
吓得我连夜换掉图片服务