01
快速开始
设置服务地址和主 Token,然后创建任务。
鉴权
除健康检查、签名下载链接和 /share/:id 外,所有 API 都需要
Authorization: Bearer <MASTER_TOKEN>。
返回值中的 job.id 是后续查询、签名、取消和删除操作使用的
JOB_ID。
网页端可在资源 URL 输入框中每行填写一个链接并批量创建任务;批量模式会为每个链接自动推断文件名。
02
查询与 CLI 下载
等待状态变成 ready,再生成临时下载链接。
Shell · 查询状态
export JOB_ID="从创建任务响应中取得的 UUID"
curl --fail-with-body --silent \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
"$R2_PROXY_URL/api/jobs/$JOB_ID" | jq
浏览器 / curl
适合小文件或快速测试,使用一个标准 HTTP 下载连接。
aria2c(推荐)
使用多路 Range 请求,跨境链路通常比浏览器单连接更快。
Shell · 生成签名并用 aria2c 下载
SIGNED_URL=$(curl --fail-with-body --silent \
-X POST \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
"$R2_PROXY_URL/api/jobs/$JOB_ID/sign" | jq -r '.url')
aria2c -c -x 8 -s 8 -k 4M \
--file-allocation=none \
"$SIGNED_URL"
依赖
macOS 可运行 brew install aria2 jq。签名链接与文件同时
到期;文件剩余多久,链接就最多有效多久。
Shell · 取消或删除
# 取消正在运行的任务
curl --fail-with-body --silent -X POST \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
"$R2_PROXY_URL/api/jobs/$JOB_ID/cancel" | jq
# 删除任务记录、R2 对象和未完成分片
curl --fail-with-body --silent -X DELETE \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
"$R2_PROXY_URL/api/jobs/$JOB_ID"
03
本地上传与公开分享
上传操作需要主 Token,生成的分享下载链接无需任何鉴权。
公开链接
链接格式为 /share/<UPLOAD_ID>。任何拿到链接的人都能
下载文件,文件到期或被删除后链接立即失效。
Shell · 上传一个不超过 64 MiB 的文件
export FILE="./example.bin"
export FILE_SIZE=$(wc -c < "$FILE" | tr -d ' ')
UPLOAD=$(curl --fail-with-body --silent \
-X POST "$R2_PROXY_URL/api/uploads" \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"filename\":\"$(basename "$FILE")\",\"contentType\":\"application/octet-stream\",\"contentLength\":$FILE_SIZE}")
UPLOAD_ID=$(printf '%s' "$UPLOAD" | jq -r '.job.id')
PART=$(curl --fail-with-body --silent \
-X PUT "$R2_PROXY_URL/api/uploads/$UPLOAD_ID/parts/1" \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
-H "Content-Type: application/octet-stream" \
-H "X-Upload-Size: $FILE_SIZE" \
--data-binary "@$FILE" | jq -c '.part')
curl --fail-with-body --silent \
-X POST "$R2_PROXY_URL/api/uploads/$UPLOAD_ID/complete" \
-H "Authorization: Bearer $R2_PROXY_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"parts\":[$PART]}" | jq
大于 64 MiB 的文件请直接使用网页,浏览器会自动切片并显示上传进度。
04
REST API
响应均为 JSON;删除成功时返回空的 204 响应。
| 方法 |
路径 |
用途 |
| GET |
/health |
无需鉴权的健康检查 |
| POST |
/api/jobs |
创建拉取任务,返回 202 |
| GET |
/api/jobs |
列出全部任务摘要 |
| GET |
/api/jobs/:id |
读取任务进度和 Workflow 状态 |
| POST |
/api/jobs/:id/sign |
生成临时签名下载 URL |
| POST |
/api/jobs/:id/cancel |
终止任务并清理未完成上传 |
| POST |
/api/uploads |
初始化本地 multipart 上传 |
| PUT |
/api/uploads/:id/parts/:part |
上传一个 64 MiB 分片 |
| POST |
/api/uploads/:id/complete |
合并分片并返回公开分享 URL |
| DELETE |
/api/jobs/:id |
删除任务及其 R2 文件 |
| GET |
/api/files/:id |
Bearer 或签名鉴权下载,支持单段 Range |
| HEAD |
/api/files/:id |
读取文件大小、ETag 和下载元数据 |
| GET |
/share/:id |
无需鉴权的公开下载,支持 Range 和 HEAD |
queued
→
probing
→
downloading
→
ready
任一步骤失败会进入 error;主动取消会进入
canceled。
05
创建任务字段
POST /api/jobs 接收以下 JSON 对象。
| 字段 |
类型 |
说明 |
url |
string |
必填,任意绝对 HTTP(S) 资源地址 |
filename |
string | null |
可选;为空时从 URL 或响应头推断 |
headers |
object |
可选;发往源站的请求头,例如源站 Authorization |
forwardSensitiveHeaders |
boolean |
跨域重定向后是否继续发送敏感请求头,默认 false |
JSON · 带源站鉴权
{
"url": "https://example.com/private/model.safetensors",
"filename": "model.safetensors",
"headers": {
"Authorization": "Bearer <SOURCE_TOKEN>"
},
"forwardSensitiveHeaders": false
}
- 不要把主 Token、源站 Token 或签名下载链接分享给其他人。
- 主 Token 只保存在当前浏览器的
sessionStorage。
-
跨域重定向默认移除
Authorization、Cookie 和
Proxy-Authorization。
- 文件在任务完成 24 小时后自动从 R2 删除。
- 本地上传生成的是公开链接,不包含 Token,也不执行下载鉴权。
- 下载支持断点续传;无效或超出文件范围的 Range 返回 416。