一个基于 Cloudflare Workers 的存储代理服务,提供高速、安全的文件下载服务。
可以对接基于S3标准的第三方存储挂载
专门用作图床用途的话建议使用imagehost的分支branch
- 直接流式传输 - 使用 AWS S3 SDK 直接流式传输,下载流畅无卡顿(受cpu limited影响,可能有些波动,但不影响整体速度)
- 安全访问控制 - 基于时间戳的 Token 验证机制(1小时有效期)
- 智能缓存 - 支持两种模式:直接代理和缓存代理
- 断点续传 - 完整支持 HTTP Range 请求
- 全球加速 - 利用 Cloudflare 全球 CDN 网络加速访问
- 易于部署 - 简单配置即可部署到 Cloudflare Workers
- Node.js 18+
- Cloudflare 账号
- 其他支持S3标准的存储账号
git clone https://github.com/ArisuMika520/b2tocf.git
cd b2tocfnpm install- 登录
- 创建一个 Bucket(或使用现有的)
- 创建 Application Key(不同服务商不一样,自行配置):
- 进入 App Keys 页面
- 点击 Add a New Application Key
- 记录
keyID和applicationKey
- 获取 S3 Endpoint:
- 在 Bucket 详情页找到 Endpoint
# 复制配置模板
cp wrangler.toml.example wrangler.toml
# 编辑 wrangler.toml,填入你的信息# 设置 B2 Bucket 名称
wrangler secret put B2_BUCKET_NAME
# 输入: your-bucket-name
# 设置 B2 S3 Endpoint
wrangler secret put B2_S3_ENDPOINT
# 输入: s3.us-west-004.backblazeb2.com
# 设置 B2 Access Key ID
wrangler secret put B2_ACCESS_KEY_ID
# 输入: your-key-id
# 设置 B2 Secret Application Key
wrangler secret put B2_SECRET_APPLICATION_KEY
# 输入: your-application-key
# 设置 URL 加密密钥(自定义一个随机字符串)
wrangler secret put URL_SECRET_KEY
# 输入: your-random-secret-keynpm run dev访问 http://localhost:8787/your-file-path 测试
npm run deploy部署成功后,你会得到一个类似 https://b2-download-worker.your-subdomain.workers.dev 的 [object Object] 使用方法
https://your-worker.dev/path/to/file.zip
https://your-worker.dev/path/to/file.zip
- 实时获取文件
- 适合不常访问的大文件
- 缓存时间:4小时
https://your-worker.dev/path/to/file.zip?mode=cache
- 首次访问后缓存到 Cloudflare
- 适合频繁访问的文件
- 缓存时间:24小时
系统会自动生成基于时间戳的 Token(1小时有效期),无需手动添加。
如果需要验证特定 Token:
https://your-worker.dev/path/to/file.zip?token=your-token
支持标准的 HTTP Range 请求:
curl -H "Range: bytes=0-1023" https://your-worker.dev/path/to/file.zip| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mode |
string | proxy |
代理模式:proxy(直接)或 cache(缓存) |
token |
string | - | 可选的验证 Token |
| 响应头 | 说明 |
|---|---|
X-Token |
当前有效的 Token |
X-Cache-Status |
缓存状态:HIT(命中)或 MISS(未命中) |
CF-Cache-Status |
Cloudflare 缓存状态 |
Content-Disposition |
文件下载名称 |
Accept-Ranges |
支持断点续传 |
- ✅ 使用时间戳 Token 验证(1小时有效期)
- ✅ 支持 CORS 跨域访问
- ✅ 不暴露 B2 凭证
- ✅ 支持自定义 URL 加密密钥
- 软件分发下载
- 视频/音频流媒体
- 文档资料共享
- 图片资源加速
- 大文件下载服务
- Cloudflare Workers - 边缘计算平台
- AWS SDK for JavaScript v3 - S3 客户端
- TypeScript - 类型安全
# 安装依赖
npm install
# 本地开发
npm run dev
# 部署到 Cloudflare
npm run deploy
# 查看部署日志
wrangler tail
# 删除 Worker
wrangler delete编辑 src/index.ts:
// 直接代理模式缓存时间(秒)
headers.set('Cache-Control', 'public, max-age=14400'); // 4小时
// 缓存代理模式缓存时间(秒)
headers.set('Cache-Control', 'public, max-age=86400'); // 24小时编辑 src/index.ts 中的 generateHourlyToken 函数:
// 修改时间戳精度(毫秒)
const hourTimestamp = Math.floor(Date.now() / 3600000).toString(); // 1小时
// 改为 1800000 = 30分钟
// 改为 7200000 = 2小时A: Token 有效期为1小时,请刷新页面获取新的 URL(系统会自动生成新 Token)
A:
- 检查文件路径是否正确
- 确认 Bucket 权限设置
- 查看 Worker 日志:
wrangler tail
本项目遵从 MIT 开源协议, 玩的开心!
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过以下方式联系:
- 提交 Issue
⭐ 如果这个项目对你有帮助,请给个 Star!