本示例讲解如何在服务端完成签名,然后通过表单直传数据到OSS。

说明 本示例无法实现分片上传与断点续传。

背景

采用JavaScript客户端直接签名(参见JavaScript客户端签名直传)有一个严重的安全隐患:OSS AccessKey暴露在前端页面,这是非常不安全的做法。因此,OSS提供了服务端签名后直传的方案。

Demo

您可以通过样例体验服务端签名后直传效果:PC浏览器测试样例

原理介绍



服务端签名后直传的原理如下:

  1. 用户发送上传Policy请求到应用服务器。
  2. 应用服务器返回上传Policy和签名给用户。
  3. 用户直接上传数据到OSS。

本示例中,web端向服务端请求签名,然后直接上传,不会对服务端产生压力,而且安全可靠。但是这个示例有个问题,就是用户上传了多少文件,上传了什么文件,服务端并不能马上知道,如果想实时了解用户上传了什么文件,可以采用服务端签名直传并设置上传回调

流程和源码解析

“服务端签名后直传”的源码流程和“服务端签名直传并设置上传回调”类似,请参考服务端签名直传并设置上传回调–原理介绍

代码示例

请参考“服务端签名直传并设置上传回调”中的各语言版本示例:

本场景是服务端签名后直传,并没有上传回调。与“服务端签名直传并设置上传回调”示例中的区别在于,在下载的客户端源码中打开upload.js文件,找到如下代码片段:

'key' : g_object_name,
        'policy': policyBase64,
        'OSSAccessKeyId': accessid, 
        'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
        'callback' : callbackbody,
        'signature': signature,
    };

'callback' : callback注释掉,这样就关闭了“上传回调”的开关,只提供“服务端签名后直传”的功能。

说明 如果要开启回调,请保证 callbackbody计算正确。