|
| 1 | +--- |
| 2 | +sidebar_position: 1 |
| 3 | +title: 获取上传凭证 |
| 4 | +hide_title: true |
| 5 | +--- |
| 6 | + |
| 7 | +<center> |
| 8 | + |
| 9 | +## 获取上传凭证 |
| 10 | + |
| 11 | +</center> |
| 12 | + |
| 13 | +### 简要描述 |
| 14 | + |
| 15 | +- 初始化表单直传任务,获取上传所需的临时 URL、字段和 Header。 |
| 16 | + |
| 17 | +### 请求方式 |
| 18 | + |
| 19 | +- `post` |
| 20 | + |
| 21 | +### 请求 URL |
| 22 | + |
| 23 | +- `{API_ADDRESS}/object/initiate_form_data` |
| 24 | + |
| 25 | +### Header |
| 26 | + |
| 27 | +| header 名 | 示例值 | 选填 | 类型 | 说明 | |
| 28 | +| :---------- | :------------ | :--- | ------ | ---------------------------- | |
| 29 | +| operationID | 1646445464564 | 必填 | string | 用于全局链路追踪,建议使用时间戳,在每个请求中独立 | |
| 30 | +| token | eyJhbxxxx3Xs | 必填 | string | [管理员 token](/restapi/apis/authenticationManagement/getAdminToken) | |
| 31 | + |
| 32 | +### 请求参数示例 |
| 33 | + |
| 34 | +```json |
| 35 | +{ |
| 36 | + "name": "avatar.png", |
| 37 | + "size": 204800, |
| 38 | + "contentType": "image/png", |
| 39 | + "group": "avatar", |
| 40 | + "millisecond": 600000 |
| 41 | +} |
| 42 | +``` |
| 43 | + |
| 44 | +| 字段名 | 选填 | 类型 | 说明 | |
| 45 | +| :---------- | :--- | :----- | ------------------------------------------------ | |
| 46 | +| name | 必填 | string | 对象名称,通常为文件名 | |
| 47 | +| size | 必填 | int64 | 文件大小(字节) | |
| 48 | +| contentType | 必填 | string | 文件 MIME 类型,如 `image/png` | |
| 49 | +| group | 选填 | string | 文件分组标识,用于在存储端区分业务目录 | |
| 50 | +| millisecond | 选填 | int64 | 上传地址有效时长(毫秒),不填使用服务端默认值 | |
| 51 | + |
| 52 | +### 成功返回示例 |
| 53 | + |
| 54 | +```json |
| 55 | +{ |
| 56 | + "errCode": 0, |
| 57 | + "errMsg": "", |
| 58 | + "errDlt": "", |
| 59 | + "data": { |
| 60 | + "id": "upload-task-id", |
| 61 | + "url": "https://storage.example.com/form-upload", |
| 62 | + "file": "file", |
| 63 | + "header": [ |
| 64 | + { |
| 65 | + "key": "Content-Type", |
| 66 | + "value": "multipart/form-data" |
| 67 | + } |
| 68 | + ], |
| 69 | + "formData": { |
| 70 | + "policy": "BASE64_POLICY", |
| 71 | + "signature": "SIGN_VALUE", |
| 72 | + "key": "tmp/avatar.png" |
| 73 | + }, |
| 74 | + "expires": 1715065020123, |
| 75 | + "successCodes": [ |
| 76 | + 200 |
| 77 | + ] |
| 78 | + } |
| 79 | +} |
| 80 | +``` |
| 81 | + |
| 82 | +### 成功返回示例的参数说明 |
| 83 | + |
| 84 | +| 参数名 | 类型 | 说明 | |
| 85 | +| :---------- | :-------------- | :------------------------------------------------------------------- | |
| 86 | +| errCode | int | 错误码,0 表示成功 | |
| 87 | +| errMsg | string | 错误简要信息,为空 | |
| 88 | +| errDlt | errDlt | 错误详细信息,为空 | |
| 89 | +| data | object | 通用数据对象,具体结构见下方 | |
| 90 | +| id | string | 上传任务 ID,稍后调用完成接口时使用 | |
| 91 | +| url | string | 第三方存储直传地址 | |
| 92 | +| file | string | 文件内容对应的表单字段名 | |
| 93 | +| header | KeyValues 数组 | 直传 HTTP Header 列表 | |
| 94 | +| formData | map<string,string> | 需要在表单中追加的业务字段集合 | |
| 95 | +| expires | int64 | 凭证过期时间戳(毫秒) | |
| 96 | +| successCodes | array<int32/> | 直传成功时可接受的 HTTP 状态码,如 `200` | |
| 97 | + |
| 98 | +### 上传说明 |
| 99 | + |
| 100 | +1. 构造 `multipart/form-data` 请求,目标地址为返回的 `url`。 |
| 101 | +2. 将 `header` 中给出的键值添加到 HTTP Header。 |
| 102 | +3. 在请求体中写入 `formData` 的所有键值对,键名和键值须保持原样。 |
| 103 | +4. 将真实的文件内容放入 `file` 字段(字段名必须与返回值一致),例如 `-F "file=@avatar.png"`。 |
| 104 | +5. 根据 `successCodes` 列表判断上传是否成功,收到成功响应后再调用确认接口。 |
| 105 | + |
| 106 | +示例命令: |
| 107 | + |
| 108 | +```bash |
| 109 | +curl -X POST "https://storage.example.com/form-upload" \ |
| 110 | + -H "Content-Type: multipart/form-data" \ |
| 111 | + -F "policy=BASE64_POLICY" \ |
| 112 | + -F "signature=SIGN_VALUE" \ |
| 113 | + -F "key=tmp/avatar.png" \ |
| 114 | + -F "file=@avatar.png" |
| 115 | +``` |
0 commit comments