OPEN DOWNLOAD RELAY

R2 Proxy

把远端资源或本地文件存入 Cloudflare R2,再生成支持断点续传的链接。

新建任务

支持批量 URL、重定向和自定义源站请求头。

OPEN ACCESS
文件完成后保留 24 小时。

上传本地文件

分片上传到 R2,并生成公开分享链接。

PUBLIC LINK
上传和分享下载均无需鉴权。

任务

进度按完成的 R2 分片更新。

输入链接或上传文件,创建第一个任务。
REFERENCE

使用帮助

通过网页、REST API 或命令行管理临时下载任务。

01

快速开始

直接通过网页或 API 创建任务,无需登录或 Token。

开放访问 所有 API、远端文件下载与本地上传分享链接均无需鉴权。
Shell · 创建任务

返回值中的 job.id 是后续查询、下载、取消和删除操作使用的 JOB_ID;downloadUrl 可在返回 202 后立即开始下载,不必等待任务进入 ready。

网页端可在资源 URL 输入框中每行填写一个链接并批量创建任务;批量模式会为每个链接自动推断文件名。

02

查询与 CLI 下载

创建任务后即可下载;Worker 会等待首个 R2 分片并持续输出后续内容。

Shell · 查询状态
export JOB_ID="从创建任务响应中取得的 UUID"

curl --fail-with-body --silent \
  "$R2_PROXY_URL/api/jobs/$JOB_ID" | jq

浏览器 / curl

适合小文件或快速测试,使用一个标准 HTTP 下载连接。

Shell · 用 aria2c 下载
aria2c -c -x 8 -s 8 -k 4M \
  --file-allocation=none \
  "$R2_PROXY_URL/api/files/$JOB_ID"
依赖 macOS 可运行 brew install aria2 jq。公开下载链接在文件 到期或任务被删除后失效;任务拉取失败时,进行中的下载会以连接中断结束。
Shell · 取消或删除
# 取消正在运行的任务
curl --fail-with-body --silent -X POST \
  "$R2_PROXY_URL/api/jobs/$JOB_ID/cancel" | jq

# 删除任务记录、R2 对象和未完成分片
curl --fail-with-body --silent -X DELETE \
  "$R2_PROXY_URL/api/jobs/$JOB_ID"
03

本地上传与公开分享

上传与分享下载都无需鉴权。

公开链接 链接格式为 /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 "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 "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 "Content-Type: application/json" \
  --data "{\"parts\":[$PART]}" | jq

大于 64 MiB 的文件请直接使用网页,浏览器会自动切片并显示上传进度。

04

REST API

响应均为 JSON;删除成功时返回空的 204 响应。

方法 路径 用途
GET /health 无需鉴权的健康检查
POST /api/jobs 创建拉取任务,返回 202 和立即可用的下载 URL
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 无需鉴权;拉取中可同步下载,支持单段 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
}
06

安全与保留规则

这个服务当前以公开下载中转方式运行。

  • 所有人都能创建、查看、取消和删除任务,也能下载尚未过期的文件。
  • 不要在公开任务中填写不希望暴露给其他使用者的源站凭据。
  • 跨域重定向默认移除 Authorization、Cookie 和 Proxy-Authorization。
  • 文件在任务完成 24 小时后自动从 R2 删除。
  • 远端文件和本地上传文件都公开下载,不执行下载鉴权。
  • 下载支持断点续传;无效或超出文件范围的 Range 返回 416。