Go WebDAV 网关与 React 上传界面。WebDAV 数据面保持只读;上传界面按 BigFile 协议上传文件/文件夹并生成新的分享 hash。
PROPFIND:由本服务返回 WebDAV 元数据。GET/HEAD:文件返回307 Temporary Redirect到 BigFile 直链。- WebDAV 写方法仍返回
405,不支持通过 WebDAV 修改文件。 /ui/:React + TypeScript + shadcn 风格上传界面。/api/upload:同源上传代理,仅接受 BigFile 的原始字节上传协议。- 支持文件、多个文件、文件夹结构、SHA-256/Base62、96 MiB 分片和逐文件进度。
- 上传全部文件后自动上传
list.json,输出分享链接及BIGFILE_SHARE_HASH。
浏览器不能直接跨域调用 BigFile 上传节点,前端将原始分片发到同源 /api/upload。Go 服务校验 Content-Range、Hash、Next 后流式转发到固定上传节点,不做 multipart 包装,也不临时落盘。
文件下载仍使用 307 重定向,下载字节不经过本服务。上传字节会经过代理,因此公网部署应在反向代理处增加认证、限流和 TLS。
| 变量 | 默认值 | 说明 |
|---|---|---|
BIGFILE_SHARE_HASH |
必填 | 当前 WebDAV 挂载的 BigFile 分享 hash(Base62) |
LISTEN_ADDR |
:8080 |
HTTP 监听地址 |
DAV_PREFIX |
/ |
WebDAV 挂载前缀,推荐设为 /dav |
BIGFILE_BASE_URL |
https://www.bigfile.net |
分享清单与下载站点 |
BIGFILE_UPLOAD_URL |
https://u1.bigfile.net/v1/upload |
固定上传节点 |
REFRESH_INTERVAL |
5m |
清单刷新周期,0 表示关闭 |
HTTP_TIMEOUT |
15s |
获取 list.json 的超时 |
UPLOAD_TIMEOUT |
30m |
单个上传请求的上游超时 |
WEB_DIR |
web/dist |
React 构建产物目录 |
后端:
export BIGFILE_SHARE_HASH=Ab12Cd
export DAV_PREFIX=/dav
go run ./cmd/bigfile-webdav前端:
cd web
npm install
npm run dev打开 http://127.0.0.1:5173/。Vite 会将 /api/upload 直接代理到 BigFile 上传节点,因此可以先用开发模式生成首个分享 hash,再将结果配置为 BIGFILE_SHARE_HASH。
生产构建后,Go 服务也会在 http://127.0.0.1:8080/ui/ 提供前端:
cd web && npm ci && npm run build
cd ..
go run ./cmd/bigfile-webdavdocker build -t bigfile-webdav .
docker run --rm -p 8080:8080 \
-e BIGFILE_SHARE_HASH=Ab12Cd \
-e DAV_PREFIX=/dav \
bigfile-webdav访问:
- 上传界面:
http://127.0.0.1:8080/ui/ - WebDAV:
http://127.0.0.1:8080/dav/ - 上传代理:
POST http://127.0.0.1:8080/api/upload
curl -X PROPFIND -H 'Depth: 1' http://127.0.0.1:8080/dav/
curl -i http://127.0.0.1:8080/dav/docs/report.txt文件请求会得到 307,客户端应跟随跨主机重定向访问 BigFile。若要直接下载可使用 curl -L。
rclone 配置:
[bigfile]
type = webdav
url = http://127.0.0.1:8080/dav/
vendor = other- WebDAV 不实现认证,公网部署必须放在受保护的 HTTPS 反向代理之后。
/api/upload只能代理到配置的BIGFILE_UPLOAD_URL,不会接受客户端指定的目标地址。- 每个上传请求最多 96 MiB;大文件由浏览器分片。
- 代理只转发
Content-Range、Hash、Next和Content-Type。 - 分享 hash 更新后需要用新的
BIGFILE_SHARE_HASH重启服务,WebDAV 才会挂载新清单。