ufile

一个单二进制运行的轻量文件快传服务。支持多用户权限、限时保存、限次访问、6 位取件码,以及无需登录的下载和预览链接。普通上传单文件最大 10 MB,高级上传不受此限制。文件管理员可以查看并删除全部当前有效文件。

构建

需要 Go 1.24+ 与 Node.js 20+:

./build.sh

也可以运行 make build。构建脚本会先安装并编译前端,再通过 go:embed 将产物写入最终的 ufile 二进制,同时构建 ufile-cli;SQLite 使用纯 Go 驱动,不依赖 CGO。

ufile-cli

ufile-cli 面向自动化和 Agent,成功结果统一输出 JSON,错误 JSON 输出到 stderr,并使用稳定退出码。常用选项提供短参数,危险或低频选项保留语义明确的长参数;服务地址支持 -H、--host 和 --server。

# 密码不会进入命令参数或配置文件
printf '%s\n' "$UFILE_PASSWORD" | \
  ./ufile-cli -H https://ufile.example.com auth login -U agent --password-stdin

# 默认自动生成并回显 6 位取件码
./ufile-cli upload ./result.zip -R 1d -D 5

# 只有显式指定 --no-pickup-code 才创建公开分享
./ufile-cli upload ./public.txt --no-pickup-code

# 下载不会额外调用取件校验接口
./ufile-cli download Ab3dE8xP -C 123456 -O ./result.zip

运行 ufile-cli help 查看输出契约、环境变量和退出码,运行 ufile-cli help upload 或 ufile-cli help download 查看权限要求及操作副作用。

多平台构建:

make cli-dist

产物位于 dist/,覆盖 Linux、macOS 和 Windows 的 amd64/arm64,并附带 checksums.txt。推送 v* 标签会通过 Gitea Actions 创建 Release;需要预先配置具有仓库发布权限的 RELEASE_TOKEN secret。

运行

./ufile --data ./data --address 0.0.0.0:6616

参数:

  • --data:文件目录,默认 ./data
  • --db:SQLite 文件路径;留空时为 <data>/data.db
  • --address:监听地址,默认 0.0.0.0:6616

首次使用空数据库启动时,终端会输出 admin 的随机密码。该账号第一次登录后必须立即修改密码。

拥有用户管理权限的账号只能授予自己已有的权限,也不能编辑、重置或删除权限高于自己的账号。

分享链接

  • 下载:/uf/<file_hash>
  • 预览:/uf/<file_hash>?preview=true
  • 有取件码时追加:code=<6位取件码>

预览也会消耗一次访问次数。文件过期、访问次数耗尽或所属用户被删除时,数据库记录和磁盘文件都会被清理。

设置取件码的文件会统一记录校验、下载和预览请求中的连续失败;缺失或错误的取件码累计 5 次后,文件会立即从数据库和磁盘删除,正确校验会清零失败次数。

S
Description
No description provided
Readme
229 KiB
Languages
Go 76%
JavaScript 20.6%
Dockerfile 1%
CSS 0.9%
Shell 0.9%
Other 0.6%