对象存储

  • 表单上传

    最近更新时间:2017-03-21 13:52:02

    表单上传适用于文件内容可以在一次 HTTP 请求即可传递完成的场景。该功能非常适合在浏览器中使用 HTML 表单上传资源,或者在不需要处理复杂情况的客户端开发中使用。

    开发者只要组装一个符合 HTML 文件上传表单规范(参考RFC1867)的 HTTP 请求,并以 POST 方式向域名 upload.qiniu.com 发起这个请求,即可将指定文件上传到服务端。

    使用方法

    我们可以用如下的 HTML 表单来描述表单上传的基本用法:

    <form method="post" action="http://upload.qiniu.com/"
     enctype="multipart/form-data">
      <input name="key" type="hidden" value="<resource_key>">
      <input name="x:<custom_name>" type="hidden" value="<custom_value>">
      <input name="token" type="hidden" value="<upload_token>">
      <input name="file" type="file" />
      <input name="crc32" type="hidden" />
      <input name="accept" type="hidden" />
    </form>
    

    关键参数说明:

    名称 类型 必填 说明
    key string 资源名,必须是UTF-8编码。
    注意: 如果上传策略中 scope 指定为:<bucket>:<key>, 则该字段也必须指定。
    x:<custom_name> string 自定义变量,必须以 x: 开头,不限个数。里面的内容将在 callbackBody 参数中的 $(x:custom_name) 求值时使用。
    token string 必须是一个符合相应规格的上传凭证,否则会返回 401 表示权限认证失败。
    file file 文件本身
    crc32 string 上传内容的 crc32 校验码。
    如填入,则七牛服务器会使用此值进行内容检验。
    accept string 当 HTTP 请求指定 accept 头部时,七牛会返回 content-type 头部的值。
    该值用于兼容低版本 IE 浏览器行为。低版本 IE 浏览器在表单上传时,返回 application/json 表示下载,返回 text/plain 才会显示返回内容。

    大文件上传

    如果文件较大,或者网络环境较差,可能会导致 HTTP 连接超时而上传失败。若发生这种情况,您需要考虑换用更安全的分片上传功能。

    提交以上 HTML 表单而生成的 HTTP 请求内容大致如下:

    POST http://upload.qiniu.com/
    Content-Type: multipart/form-data; boundary=<Boundary>
    --<Boundary>
    
    Content-Disposition: form-data; name="key"
    <resource_key>
    --<Boundary>
    
    Content-Disposition: form-data; name="x:<custom_name>"
    <custom_value>
    --<Boundary>
    
    Content-Disposition: form-data; name="token"
    <upload_token>
    --<Boundary>
    
    Content-Disposition: form-data; name="file"; filename="[文件名]"
    Content-Type: <MimeType>
    [文件内容]
    --<Boundary>--
    

    在非网页开发的场景中,开发者完全可以自行组装这个HTML表单请求。考虑到各个平台上的网络库都已经对HTML文件上传表单有非常完整的支持,组装这个请求的过程将会非常轻松。

    后续动作

    我们可以在生成上传凭证时指定一系列的参数,以控制服务器在文件上传完成后的后续动作。另外如果需要,我们可以在表单参数中增加一系列魔法变量自定义变量。上述表单例子中的 x: 就是变量的使用方法示例。我们可以将其更换为一系列魔法变量或自定义变量。

    变量将会在回调和自定义返回内容中起到极大的作用。具体用法请参考回调通知(callback)自定义响应内容(ReturnBody)

    以上内容是否对您有帮助?
  • 提交工单