我看到上传相关的接口有 osbeginupload、osendupload,还有直接 PUT 到对象存储的步骤,整个流程到底是什么样的?创建新文件和给已有文件生成新版本有什么区别?
我看到上传相关的接口有 osbeginupload、osendupload,还有直接 PUT 到对象存储的步骤,整个流程到底是什么样的?创建新文件和给已有文件生成新版本有什么区别?
AnyShare 的文件上传采用"协议接口 + 对象存储直传"两段式。普通文件(≤5GB)完整流程如下:
第 1 步:开始上传 —— POST /api/efast/v1/file/osbeginupload
请求体(FileOsbeginuploadReq,必填 docid、length):
| 字段 | 说明 |
|---|---|
docid |
创建文件时传父目录 gns;**编辑文件(生成新版本)**时传所编辑文件的 gns。 |
name |
创建文件时传文件名;编辑文件时留空。 |
length |
整个文件长度(字节),最大 5GB。 |
ondup |
重名策略(仅 name 不为空时生效),默认 2:1=抛异常、2=自动改名、3=覆盖。 |
client_mtime |
客户端本地修改时间(微秒)。 |
editedrev |
编辑文件时基于的版本 ID;不为空时会校验是否为服务端最新版本,不一致报 403203。 |
创建文件请求示例:
POST /api/efast/v1/file/osbeginupload HTTP/1.1
Host: 192.168.1.100
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
{
"docid": "gns://21A9B9FD1B524CB49D54BF7399F82EB4",
"name": "file.txt",
"length": 42,
"client_mtime": 1380245084296354
}
响应示例:
{
"authrequest": [
"PUT",
"https://s3-ap-northeast-1.amazonaws.com/anyshares3accesstestbucket/21A9B9FD1B524CB49D54BF7399F82EB4/AAA6CBAFE45B4E4D884DC59805E60A5C",
"Content-Type: application/octet-stream",
"Date: Tue, 07 Apr 2015 02:35:36 GMT",
"Authorization: AWS AKIAJEROARV2UTTADY6A:PkLXjvYrDGDVZgTD8WVbMmS33q4="
],
"docid": "gns://21A9B9FD1B524CB49D54BF7399F82EB4/91E6CBAFE45B4E4D884DC59805E60A5C",
"name": "testfile",
"rev": "AAA6CBAFE45B4E4D884DC59805E60A5C"
}
第 2 步:向对象存储直传文件内容 —— 客户端在 15 分钟内,按 authrequest 指定的方法、URL、Headers 发起请求,Body 为文件内容:
PUT /anyshares3accesstestbucket/21A9B9FD1B524CB49D54BF7399F82EB4/AAA6CBAFE45B4E4D884DC59805E60A5C HTTP/1.1
Host: s3-ap-northeast-1.amazonaws.com
Content-Type: application/octet-stream
Date: Tue, 07 Apr 2015 02:35:36 GMT
Authorization: AWS AKIAJEROARV2UTTADY6A:PkLXjvYrDGDVZgTD8WVbMmS33q4=
Content-Length: 42
<文件二进制内容>
若 reqmethod 为 POST,则改用表单方式上传,阿里云 OSS 和亚马逊 S3 要求 file 必须为表单最后一个域。
第 3 步:结束上传 —— POST /api/efast/v1/file/osendupload
请求体(FileOsenduploadReq,必填 docid、rev,均来自第 1 步返回):
POST /api/efast/v1/file/osendupload HTTP/1.1
Host: 192.168.1.100
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
{
"docid": "gns://21A9B9FD1B524CB49D54BF7399F82EB4/91E6CBAFE45B4E4D884DC59805E60A5C",
"rev": "AAA6CBAFE45B4E4D884DC59805E60A5C",
"md5": "B029C864F8E75AB6CA3BBE6976C9AF27",
"crc32": "C89E6EA0"
}
响应示例:
{
"editor": "6019dc28-924e-11e5-94e2-000c29b7abd8",
"modified": 1380502294452719,
"name": "testfile"
}
说明: md5 / crc32 / slice_md5 为可选校验值;csflevel 仅在上传定密时设置(5~15 正常密级,0x7FFF 空密级)。若第 2 步直传未在 15 分钟内完成,可调用 POST /api/efast/v1/file/osuploadrefresh 重新获取鉴权请求。