对象存储
管理后台 → 设置 → 「存储后端」区块,支持三种后端,切换保存后新上传的文件写入新后端,旧文件仍从原后端读取(需保留对应绑定)。
| 后端 | 说明 |
|---|---|
r2 | Cloudflare R2 Worker binding,默认,零配置 |
s3 | 任意 S3 兼容存储(AWS S3 / B2 / OSS / COS / MinIO 等) |
webdav | 远程 WebDAV 网盘(坚果云等) |
R2(默认)
只需在 wrangler.jsonc 中保留 R2 绑定,无需任何后台配置:
jsonc
"r2_buckets": [
{ "binding": "r2", "bucket_name": "cloud-r2pan" }
]S3 兼容存储
配置项
| 字段 | 示例 | 说明 |
|---|---|---|
| 存储后端 | s3 | 切换到 S3 模式 |
| Endpoint | https://s3.amazonaws.com | S3 服务地址 |
| Region | us-east-1 | 存储区域 |
| Bucket | my-files | 存储桶名称 |
| Access Key ID | AKIA... | 访问密钥 ID(明文存) |
| Secret Access Key | wJalr... | 访问密钥(AES-GCM 加密存) |
| Addressing Style | path / virtual | Bucket 在 URL 中的位置,大多数用 path |
内置完整的 AWS Signature V4 签名(零 npm 依赖),覆盖 PutObject / GetObject(支持 Range 断点续传)/ DeleteObject / HeadObject。
测试连接
填完配置后点击 测试连接,程序会执行一次「写入临时文件 → 读回校验 → 删除」的完整往返:
POST /api/admin/storage/test
成功返回:{ ok: true, head_ok: true, head_size: 36 }常见服务商参考
| 服务商 | Endpoint | Region 示例 | Style | 备注 |
|---|---|---|---|---|
| AWS S3 | https://s3.amazonaws.com | us-east-1 | 均可 | $0.023/GB 存储 + $0.09/GB 出口 |
| Backblaze B2 | https://s3.us-west-002.backblazeb2.com | us-west-002 | path | $0.006/GB 存储 + $0.01/GB 出口 |
| Cloudflare R2 | https://{account-id}.r2.cloudflarestorage.com | auto | path | 出口费 $0 |
| 阿里云 OSS | https://oss-cn-hangzhou.aliyuncs.com | cn-hangzhou | virtual | 国内访问快 |
| 腾讯云 COS | https://cos.ap-guangzhou.myqcloud.com | ap-guangzhou | virtual | 国内访问快 |
| 七牛云 Kodo | https://s3-cn.qiniu.com | cn-z0 | virtual | 性价比高 |
| MinIO(自建) | http://your-server:9000 | 任意 | path | 内网需 Cloudflare Tunnel |
| DigitalOcean Spaces | https://nyc3.digitaloceanspaces.com | nyc3 | path | 带 CDN |
| Wasabi | https://s3.us-west-1.wasabisys.com | us-west-1 | path | 无免费额度但便宜 |
跨网段访问
Cloudflare Workers 从公网出口发起请求,访问内网 MinIO 等需要通过 Cloudflare Tunnel 暴露到公网。
远程 WebDAV 挂载(存储后端)
把支持 WebDAV 的网盘当作存储空间:
| 字段 | 示例 | 说明 |
|---|---|---|
| WebDAV URL | https://dav.jianguoyun.com/dav/ | 服务器地址 |
| 用户名 | xxx@example.com | 认证用户名 |
| 密码 | ******** | 应用密码(AES-GCM 加密存) |
对外 WebDAV 服务(挂载点)
独立于存储后端的功能:开启后本站文件可通过 WebDAV 协议被外部挂载(如挂载到 Windows 资源管理器、rclone)。
| 设置项 | 默认值 | 说明 |
|---|---|---|
| 启用 WebDAV 服务 | 关闭 | 挂载点为 /webdav/ |
| 用户名 | webdav | Basic Auth 用户名 |
| 密码 | 未设置 | 必须设置后才能连接 |
| 根目录 | / | 限制可访问的目录范围,如 /shared |
切换到 S3 的完整流程
- 先用默认 R2 模式部署一次,让 D1 自动建表
- 登录
/admin→ 文件 Tab,上传一个测试文件验证 Worker 正常 - 设置 Tab → 「存储后端」选 s3,填写 Endpoint / Region / Bucket / AK / SK
- 保存 → 测试连接,确认连通
- 之后上传写入 S3,下载也从 S3 读取
数据迁移
项目不提供一键迁移脚本,可用以下任一方式把 R2 数据搬到 S3:
bash
# rclone
rclone copy cloudflare-r2:bucket/path s3-alias:bucket/path
# awscli(需先把 R2 配置为 S3 endpoint)
aws s3 cp --recursive s3://r2-bucket/files/ s3://new-s3-bucket/files/或在 Cloudflare 控制台:R2 → Migration Tool → 选择目标 S3 存储桶。
移除 R2 绑定前
如果完全移除 r2_buckets 绑定,旧文件记录仍在 D1 中但 R2 里已无对象,下载会报 404。可执行 /api/admin/shares/cleanup 清理孤儿记录。