阿里云OSS直(zhí)传

最近的一个项目在上传图片的时候速度非常慢,现有的上传方案是:图片发送到服务器,有服务器往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了

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://lang.ma/
* 个性:https://oba.by/
* 本文标题: 《阿里云OSS直(zhí)传》
* 本文链接:https://lang.ma/2023/08/12841
* 短链接:https://oba.by/?p=12841
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

10 comments

  1.  Level 6
    Microsoft Edge 115 Microsoft Edge 115 Windows 10 Windows 10 cn北京市 移动

    你快别宣传了,阿里云OSS好贵的说,外链一定要用CDN做回源,不然更贵!

    1. 公主 Queen 
      Google Chrome 114 Google Chrome 114 Windows 10 Windows 10 cn山东省临沂市 联通

      哈哈,不是宣传,公司项目。就是折腾这个破玩儿费劲,分享下经验而已。
      如果私人用,那当然是不建议直接用啦。

    2. 公主 Queen 
      Google Chrome 114 Google Chrome 114 Windows 10 Windows 10 cn山东省临沂市 联通

      哈哈哈,我怀疑你看错字了。我写的是直传,直传,直传,不是宣传啊喂~ laugh

  2.  Level 6
    Google Chrome 115 Google Chrome 115 Mac OS X 10.15 Mac OS X 10.15 cn浙江省 移动

    我想了半天,这也不是多音字啊

    1. 公主 Queen 
      Google Chrome 114 Google Chrome 114 Windows 10 Windows 10 cn山东省临沂市 联通

      就是,我怀疑他就是老花眼。所以我加了个拼音,哈哈哈。照顾老弱病残孕。 kiss

    1. 公主 Queen 
      Google Chrome 114 Google Chrome 114 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      嗯嗯,个人项目最好不要用。存储计费,流量计费,价格还是比较高的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注