如何实现Python服务端签名直传回调

更新时间:
一键部署
我的部署

本文以Python语言为例,讲解在服务端通过Python代码完成签名,并且设置上传回调,然后通过表单直传数据到OSS。

操作步骤

本文所使用的ROS模板文件:Python-ros.yml

快速部署

  1. 您可以点击一键部署通过ROS快速完成搭建并部署服务,无需手动执行部署步骤。

  2. 体验服务端签名直传。

    1. 输出页签下,复制UploadPath的值,然后在浏览器中打开。

    2. OSS web直传页面,单击选择文件,选择指定类型的文件,然后单击开始上传。上传成功后,显示回调服务器返回的内容。

  3. 体验完成后,释放测试资源,避免继续产生费用。

    1. 资源栈页面的右上角,单击删除

    2. 删除资源栈页面,确保删除方式释放资源,然后单击确定

手动部署

前提条件

  • 应用服务器对应的域名可通过公网访问。

  • 确保应用服务器已经安装Python 2.6以上版本(执行python --version命令进行查看)。

  • 确保PC端浏览器支持JavaScript。

步骤1:配置应用服务器

  1. 下载应用服务器源码(Python版本)

  2. 本示例中以Ubuntu 16.04为例,将源码解压到/home/aliyun/aliyun-oss-appserver-python目录下。

  3. 进入该目录,打开源码文件appserver.py,修改如下的代码片段:

    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    access_key_id = 'yourAccessKeyId'
    access_key_secret = 'yourAccessKeySecret'
    # 填写Host地址,格式为https://bucketname.endpoint。
    host = 'https://examplebucket.oss-cn-hangzhou.aliyuncs.com'
    # 设置上传回调URL,即回调服务器地址,用于处理应用服务器与OSS之间的通信。OSS会在文件上传完成后,把文件上传信息通过此回调URL发送给应用服务器。
    callback_url = "https://192.168.0.0:8888"
    # 设置上传到OSS文件的前缀,可置空此项。置空后,文件将上传至Bucket的根目录下。
    upload_dir = 'exampledir/'

步骤2:配置客户端

  1. 下载客户端源码

  2. 解压客户端源码文件,本示例解压到D:\aliyun\aliyun-oss-appserver-js目录。

  3. 进入该目录,打开upload.js文件,找到下面的代码语句:

    // serverUrl是用户获取签名和Policy等信息的应用服务器的URL,请对应替换以下IP地址和Port端口信息。
    serverUrl = 'http://192.0.2.0:8888'
  4. severUrl改成应用服务器的地址,客户端可以通过它可以获取签名直传Policy等信息。如本例中可修改为:serverUrl = 'https://192.168.0.0:8888'

步骤3:修改CORS

客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin的请求消息。OSS对带有Origin头的请求消息会进行跨域规则(CORS)的验证。因此需要为Bucket设置跨域规则以支持Post方法。具体操作步骤,可参考跨域设置

步骤4:体验上传回调

  1. 启动应用服务器。

    /home/aliyun-oss-appserver-python目录下,执行python appserver.py 11.22.XX.XX 1234命令启动应用服务器。

    说明

    请将IP地址和端口改成您配置的应用服务器的IP地址和端口。

  2. 启动客户端。

    PC侧的客户端源码目录中,打开index.html文件。

    重要

    index.html文件不保证兼容IE 10以下版本浏览器,若使用IE 10以下版本浏览器出现问题时,您需要自行调试。

  3. 上传文件。

    单击选择文件,选择指定类型的文件后,单击开始上传。上传成功后,显示回调服务器返回的内容。