用 Go + Cloudflare R2 自建文件、移动应用分发站,支持 APK / IPA 及大文件上传

# 用 Go + Cloudflare R2 自建移动应用分发站,支持 APK / IPA 及大文件上传

闲着没事想搭个自己用的文件分享站,各种云盘要么限速要么强制登录,干脆自己撸一个。
本来只是想上传普通文件,后来顺手把 Android APK 和 iOS IPA 也支持进去了,
图片、视频、文档这些格式也一并加上,就成了现在这个「云传」。

## 技术栈

部署用 Docker Compose,SQLite 文件挂载到 named volume,R2 配置通过环境变量注入,
敏感信息不入库。

## 几个值得一提的细节

大文件上传:R2 的 PutObject 对大文件容易超时,超过 100MB 的文件自动切换
S3 分片上传,每片 128MB,3 路并发,实测稳定。

下载加速:配置了 R2 公共域名(R2_PUBLIC_URL)后,下载直接 302 跳转到
Cloudflare CDN 边缘节点,绕开服务器带宽瓶颈;没配就走 24 小时预签名 URL,中断可续传。

文件安全:上传时双重校验——先白名单扩展名,再读取文件头的 magic bytes 验证内容
是否对得上,防止改后缀伪装上传。APK 额外用 apkparser 解析包名、版本号和图标;
IPA 同样作为独立类型处理,自动提取 Info.plist 中的 Bundle ID 和版本信息。

下载密码:bcrypt 存储,暴力破解有 IP + 短码维度的频率限制。验证通过后颁发
HMAC-SHA256 签名 cookie,10 分钟有效,每次进下载页都强制重新输入。

短链:随机生成 base62 短码,碰撞重试 5 次,直接拼 {BaseURL}/d/{code} 作为
分发链接,上传完即时生成二维码。

## 功能概览

整体代码量不大,Go 的标准分层写下来比较舒服,有类似需求的可以参考,如果你也有类似的折腾经历,欢迎评论区聊聊。


评论(0)

暂无评论,来说第一句话吧!

登录 后才能发表评论。