分块上传

更新: 2016-12-20

调用流程

  1. 初始化上传
  2. 上传数据块
  3. 完成上传

如果返回500或409错误, 需要调用接口查询已上传的数据, 终止上传调用取消上传


初始化上传

POST /upload_init?org_client_id={org_client_id} HTTP/1.1
Host: {上传服务器域名}
x-gk-upload-filename: {文件名}
x-gk-upload-pathhash: {文件唯一标识}
x-gk-upload-filehash: {文件内容sha1值}
x-gk-upload-filesize: {文件大小}
x-gk-token: {token}
HTTP头字段 是否必需 说明
x-gk-upload-filename 文件名, 需要做rfc3986URL编码
x-gk-upload-pathhash 文件唯一标识, 上传文件接口返回的hash
x-gk-upload-filehash 文件内容sha1值, 40字节, 英文字母小写
x-gk-upload-filesize 文件大小
x-gk-token 用户access_token, 使用库文件API时不需要传
URL参数 是否必需 说明
org_client_id 库授权ID, 使用库文件API时, 必须要传

成功返回

HTTP 200

{
    "session": 上传的会话ID
}

HTTP 202 秒传完成无需调用后续接口

错误返回

HTTP 400 缺少参数


上传数据块

PUT /upload_part HTTP/1.1
Host: {上传服务器域名}
x-gk-upload-session: {session}
x-gk-upload-range: {range}
x-gk-upload-crc: {crc}
HTTP头字段 是否必需 说明
x-gk-upload-session 上传的会话ID
x-gk-upload-range 当前块位置, 例如: 0-199表示第一个字节到第200个字节的数据
x-gk-upload-crc 数据块的crc校验值, 值为无符号32位int型

HTTP内容

需要上传的文件块数据, 最大支持10MB

成功返回

HTTP 200 分块上传成功

HTTP 202 服务端的临时文件已完整, 需调用 完成上传 接口

错误返回

HTTP 401 session参数错误

HTTP 400

  • crc参数错误
{
    "error_code": 40001,
    "error_msg": "part crc mismatch:23857631 expect 12856363"
}
  • range参数和上传的分块大小不一致
{
    "error_code": 40002,
    "error_msg": "part length error:2049 expect 2048"
}

HTTP 409 上传的分块与服务端的临时文件不匹配, 返回的expect为服务端期望的分块起始位置

{
    "error_code": 40900,
    "error_msg": "range begin:0 expect:2048",
    "expect": 2048
}

HTTP 410 服务端的上传临时文件正在被操作, 无法写入分块

HTTP 416 range参数错误

HTTP 500 服务器异常, 分块写入失败


查询已上传的数据

POST /upload_req HTTP/1.1
Host: {上传服务器域名}
x-gk-upload-session: {session}
HTTP头字段 是否必需 说明
x-gk-upload-session 上传的会话ID

成功返回

HTTP 200

返回的内容是数值, 如: 2048, 表示已上传了2048字节

错误返回

HTTP 500 没有初始化上传

HTTP 401 session参数错误


完成上传

POST /upload_finish HTTP/1.1
Host: {上传服务器域名}
x-gk-upload-session: {session}
HTTP头字段 是否必需 说明
x-gk-upload-session 上传的会话ID

成功返回

HTTP 200 成功

HTTP 202 正在处理上传请求, 需等待一段时间再发起完成上传的请求

错误返回

HTTP 500 没有初始化上传(需要重新调用 初始化上传 接口)

HTTP 401 session参数错误

HTTP 409 上传的数据不完整, 需要继续上传 (需调用 查询已上传的数据 接口)


取消上传

POST /upload_abort HTTP/1.1
Host: {上传服务器域名}
x-gk-upload-session: {session}
HTTP头字段 是否必需 说明
x-gk-upload-session 上传的会话ID

成功返回

HTTP 200

错误返回

HTTP 500 没有初始化上传

HTTP 401 session参数错误