分片上传
大文件分片上传,支持并发上传提高速度。
流程
分片上传需要三步:
- 初始化 - 获取分片任务 ID
- 分片上传 - 上传各个分片
- 查询状态 - 等待合并完成
分片初始化
基本信息
| 项目 | 值 |
|---|---|
| 方法 | POST |
| 路径 | {globalDomain}/ous/api/v2/block/upload/init |
| 认证 | ous-token-v2 |
Request
| 参数 | 必须 | 类型 | 说明 |
|---|---|---|---|
md5 | ✅ | string | 文件完整 MD5 |
blocks | ✅ | long | 总分片数 |
size | ✅ | long | 文件总大小(字节) |
name | ✅ | string | 文件名 |
metadata | ❌ | string | 元数据 |
Example
bash
curl -X POST '{globalDomain}/ous/api/v2/block/upload/init' \
-H 'ous-token-v2: {ousToken}' \
-d 'md5=xxx&blocks=10&size=104857600&name=video.mp4'python
import hashlib
# 计算文件信息
with open('video.mp4', 'rb') as f:
file_data = f.read()
md5 = hashlib.md5(file_data).hexdigest()
size = len(file_data)
# 分片大小建议 5-10MB
block_size = 10 * 1024 * 1024
blocks = size // block_size + 1
response = requests.post(
f"{globalDomain}/ous/api/v2/block/upload/init",
headers={"ous-token-v2": ousToken},
data={"md5": md5, "blocks": blocks, "size": size, "name": "video.mp4"}
)Response
json
{
"c": "0",
"d": {
"taskId": "block_upload_task_id"
}
}分片上传
基本信息
| 项目 | 值 |
|---|---|
| 方法 | POST |
| 路径 | {globalDomain}/ous/api/v2/block/upload/part |
| 认证 | ous-token-v2 |
| Content-Type | multipart/form-data |
Request
| 参数 | 必须 | 类型 | 说明 |
|---|---|---|---|
file | ✅ | MultipartFile | 分片文件内容 |
block | ✅ | int | 分片序号(从 1 开始) |
并发限制
同一文件的分片并发数建议不超过 2,超过会返回错误码 6。
Example
python
# 分片上传循环
for i in range(blocks):
start = i * block_size
end = min(start + block_size, size)
chunk = file_data[start:end]
files = {'file': ('chunk', chunk)}
data = {'block': i + 1} # 从 1 开始
response = requests.post(
f"{globalDomain}/ous/api/v2/block/upload/part",
headers={"ous-token-v2": ousToken},
files=files,
data=data
)查询状态
分片全部上传后,轮询 查询状态 接口等待合并完成。
中止上传
如需中止分片上传:
bash
curl -X POST '{globalDomain}/ous/api/v2/block/upload/abort' \
-H 'ous-token-v2: {ousToken}'