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

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

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

## 技术栈

  • Go + Gin:后端主框架,路由清晰,性能够用
  • SQLite + GORM:元数据存储,单文件、零运维,够用就好
  • Cloudflare R2:对象存储,S3 兼容接口,无出站流量费用

部署用 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} 作为
分发链接,上传完即时生成二维码。

## 功能概览

  • 登录用户上传文件,生成短链 + 二维码
  • 支持 Android APK / iOS IPA / 图片 / 视频 / 文档 / 压缩包
  • 下载页公开访问,支持密码保护
  • APK / IPA 自动展示包名、版本历史列表
  • 管理后台统一管理文件和用户,新用户由管理员创建

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


评论(0)

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

登录 后才能发表评论。