上传凭证

描述

上传凭证请放入到请求的表单中,参数名:token

上传凭证构建的三个基础数据源:

  • 上传策略数据putPolicy
    上传策略数据是资源上传时附带的一组配置设定。通过这组配置信息,网宿云存储可以了解用户上传的需求:它将上传什么资源,上传到哪个空间,上传结果是回调通知还是使用重定向跳转,是否需要设置反馈信息的内容,以及授权上传的截止时间等等。

  • 安全密钥SecretKey
    请从云存储平台密钥管理处获取SK。

  • 访问密钥AccessKey
    请从云存储平台密钥管理处获取AK。

上传凭证uploadToken是基于三个基础数据源上复杂签名计算的结果。通过对上传凭证验证,可以确保非法上传请求被阻止,防止入侵行为。

上传策略数据

数据格式

{
  "scope": "<bucket string>",
  "deadline": "<deadline string>",
  "saveKey": "<saveKey string>"
  "returnUrl": "<returnUrl string>",
  "returnBody": "<returnBody string>",
  "overwrite": "<overwrite int>",
  "fsizeLimit": "<fsizeLimit long>",
  "callbackUrl": "<callbackUrl string>",
  "callbackBody": "<callbackBody string>",
  "persistentOps": "<persistentOps string>",
  "persistentNotifyUrl": "<persistentNotifyUrl string>"
  "contentDetect": "<contentDetctstring>"
  "detectNotifyURL": "<detectNotifyURL string>"
  "detectNotifyRule":"<detectNotifyRule>"
  "separate": "<separate int>"
}

格式说明

字段名 必填 描述
scope 指定上传的目标空间<bucket>和文件名<key>,有两种格式:
a.<bucket>表示上传文件到指定的bucket;
b.<bucket>:<key>上传文件到指定的bucket,文件命名为key。当overwrite为1时,已存在同名资源则会被覆盖。
deadline 上传请求授权的截止时间;UNIX时间戳,单位:毫秒。范例:1398916800000,代表时间2014-05-01 12:00:00。
saveKey 自定义资源名。该字段仅支持普通上传方式
fsizeLimit 限定上传文件的大小,单位:字节(Byte)。超过限制大小的文件上传失败,返回401状态码。
注:设置为0时,无限制
overwrite 指定是否覆盖服务器上已经存在的文件:0-不覆盖,1-覆盖。默认为0 。
returnUrl Web端文件上传后,浏览器会执行303跳转的URL,通常用于HTML Form上传。如果文件上传成功,则重定向到<returnUrl>?upload_ret=urlsafe_base64_encode(returnBody)。如果文件上传失败,则重定向到<returnUrl>?code=<code>&message=<message>,其中<code>是错误码,<message>是错误具体信息。如果不设置returnUrl,则直接将returnBody的内容返回给客户端。
returnBody 上传成功后,自定义最终返回給上传端的数据。如果您只需要返回文件名和文件地址,只需将returnBody设置成fname=$(fname)&url=$(url)即可。详细用法参返回数据说明
callbackUrl 上传成功后,云存储以POST方式请求该地址。(要求:必须是公网URL地址,能正常响应HTTP/1.1 200 OK,若有空格等特殊字符,需要进行Url Encode编码)该地址响应数据格式为JSON文本。
callbackBody 上传成功后,网宿云POST方式提交到callbackUrl的数据。callbackBody 要求是合法的url query string,如:key=$(key)&fsize=$(fsize),详细用法参考回调方式数据说明
persistentNotifyUrl 接收预处理结果通知的地址,要求必须是公网URL地址,能正常响应HTTP/1.1 200 OK,若有空格等特殊字符,需要进行Url Encode编码。通知内容详见通知数据内容说明
persistentOps 文件上传成功后,预处理指令列表。每个指令是一个API规格字符串,多个指令用;分隔。请参看指令说明
contentDetect 文件上传成功后,进行内容鉴定操作。支持参数:
imagePorn-图片鉴黄, imageTerror-图片鉴恐, imagePolitical-政治人物识别
detectNotifyURL 接收鉴定结果的通知地址,要求必须是公网URL地址,能正常响应HTTP/1.1 200 OK,若有空格等特殊字符,需要进行Url Encode编码。通知内容详见鉴定通知数据内容说明
detectNotifyRule 鉴定结果通知规则设置。
all 全部通知
porn 通知色情图片
sexy 通知性感图片
normal 通知正常图片
exception 通知鉴定异常的图片
terror 通知暴恐图片(鉴定类型为imageTerror时才生效)
political 通知识别为政治人物的图片(鉴定类型为imagePolitical时才生效)
参数支持相互组合,以分号间隔
例如:参数设置为porn;exception即通知鉴定结果为色情或者鉴定异常的图片
separate 转码是否分开通知。设置1和0作为选项码:
1:表示每个转码指令执行完后都通知persistentNotifyUrl
0:表示所有转码指令执行完后再一次性通知persistentNotifyUrl
默认值为0

注:
1、请在设置persistenOps字段时,完成persistentNotifyUrl字段设置,平台会通过调用persistentNotifyUrl字段设置的URL,来通知您指令处理的结果,详见通知数据内容说明
2、采用上传处理机制,设置persistenOps字段时,指令参数saveas为必填,且文件名不能与原文件同名,否则返回401,提示信息"The Persistent File Already Exists"
3、文件命名优先级为:Scope的key > saveKey > 表单key >原文件名

上传凭证算法

构建上传策略

使用json格式封装上传文件的一些信息putPolicy

{
  "scope": "<bucket string>",
  "deadline": "<deadline string>",
  "returnBody": "<returnBody string>",
  "overwrite": "<overwrite int>",
  "fsizeLimit": "<fsizeLimit long>",
  "returnUrl": "<returnUrl string>"
}

url安全的base64编码上传策略

putPolicy进行URL安全的Base64编码,得到encodePutPolicy

encodePutPolicy = urlsafe_base64_encode(putPolicy)

hmac-sha1签名数据

使用SecretKeyencodePutPolicy进行HMAC-SHA1签名,得到Sign

Sign = hmac_sha1(encodePutPolicy, "<SecretKey>")
            注:不同语言的HMAC-SHA1方法有差异,可参考各语言SDK中的实现

外部资源:HMAC-SHA1签名
示例代码: HMAC-SHA1签名

url安全的base64编码签名数据

对签名数据Sign进行URL安全的Base64编码,得到encodedSign

encodeSign = urlsafe_base64_encode(Sign)

生成上传凭证

AccessKeyencodedSignencodeputPolicy:连接起来,得到上传凭证uploadToken

uploadToken = AccessKey:encodedSign:encodePutPolicy