OneFile

自托管对象存储上传工具

一个入口,上传到所有 bucket。

OneFile 把 S3、R2、B2、OCI、阿里云 OSS、腾讯云 COS 聚合成一个自托管上传入口:自己登录后台管理,工具走 API key,朋友走公开上传链接。

在线预览 快速开始

AWS S3 Cloudflare R2 Backblaze B2 Oracle OCI Aliyun OSS Tencent COS

核心能力

GitHub OAuth 登录 部署前准备 GitHub OAuth App,用于管理员登录后台。
多云管理 维护存储账号、bucket、公开访问地址和 provider 特有配置。
文件后台 上传、浏览目录、搜索、预览图片、复制链接和删除对象。
API key 上传 给 Markdown 编辑器、脚本、CI 和第三方系统提供统一上传入口。
公开上传页 复制 UUID 链接或二维码发给朋友,对方无需登录即可上传。
大文件上传 超过 100 MiB 的网页上传使用 multipart 分片流程,队列支持暂停和重试。
备份迁移 后台导入导出 SQL 备份,并同步迁移后解密凭证所需的应用密钥。

几分钟跑起来

先创建 GitHub OAuth App,把 callback 填成 https://你的域名/callback/auth。对象存储凭证启动后在后台添加。

docker run -d --name onefile --restart unless-stopped \
  -p 27507:27507 \
  -e GITHUB_CLIENT_ID=your_github_client_id \
  -e GITHUB_CLIENT_SECRET=your_github_client_secret \
  -v onefile-data:/app/data \
  ghcr.io/zhihui-hu/onefile:latest

启动后打开 http://服务器IP:27507,用 GitHub 登录,添加存储账号并同步 bucket。创建 API key 后,可以复制 token 接入工具,也可以复制公开上传链接发给朋友。

请保留 onefile-data volume。它包含 SQLite 数据库和用于加密存储凭证的应用密钥。后台支持 SQL 导入导出,迁移时请保留原始导出文件名。

外部工具用 API key,朋友用公开链接

程序接入时使用 bearer token;只想让别人上传时,直接分享公开上传页。应用内 /api-docs 页面包含完整 API 文档。

curl -fsS -X POST "$ONEFILE_BASE_URL/api/uploads/direct" \
  -H "Authorization: Bearer $ONEFILE_API_KEY" \
  -F "file=@./image.png"

项目结构

src/app/api/**/route.ts Node.js 后端接口
src/app/(main)/components 登录后的文件管理后台
src/app/[uuid] 公开上传页面路由
src/lib/db SQLite、Drizzle schema 和备份工具
src/lib/storage 多云 provider adapter