Sign inSign up

gomail1/go_downloader

By gomail1

•Updated 27 days ago

Image
Databases & storage
1

10K+

gomail1/go_downloader repository overview

⁠Go HTTP服务器下载站 - V1.3.0

使用Go语言开发的高性能文件下载站,提供文件上传、下载、浏览、审核和管理功能,支持基于角色的用户权限控制、全平台响应式设计、多协议下载功能,以及完善的安全防护和监控告警系统。

GitHub仓库: https://github.com/gomail1/go-download⁠ Docker仓库: https://hub.docker.com/r/gomail1/go_downloader⁠

⁠📢 最新更新

⁠V1.3.0 版本内容 (2026-09-08)

09-07 / 09-08 后续修复请以主 README「最新更新」#14–#18 为准:全站解锁与角色权限模型(未解锁首页留白、普通用户仅上传待审)、download-user 下载专用账号锁定与二级管理员配额无限制、文件夹上传层级保留、后台协议同意全局门控、下载通道纳入站点锁(未解锁 /download /s/ 403)、单删保留 pending、日志动作中文化、首页分享计数漏接修复、分享计数同 IP×文件×天 去重 + 自检修复按日志补齐历史分享等。

⁠🛡️ 安全加固(全量代码审查修复)
  • SSRF 防护:远程下载仅允许 http/https/ftp/magnet,拒绝 file://、内网/回环/云元数据地址;拨号前校验真实 IP,防 DNS rebinding 与重定向绕过
  • 下载管理权限收紧:下载任务管理/统计接口仅管理员/二级管理员可用
  • 任意文件写入防护:BT 种子内文件名、FTP/HTTP 远端文件名统一清洗(../、控制字符、保留名、长度截断),落盘统一安全拼接校验,杜绝路径穿越
  • 依赖漏洞修复:imaging v1.6.2 → vtemlabs fork v1.6.4(CVE-2023-36308)
  • 密码与统计接口清理:启动自动升级明文密码为 bcrypt、config 权限 0600、恒定时间比较、移除 gin /stats 死路由
⁠⚙️ 稳定性修复
  • 下载引擎 Task 广播/持久化改深拷贝快照,消除 data race
  • 修复 HTTP 分块下载小文件必失败 bug(Read 同返数据与 EOF 时丢弃末轮数据)
  • 任务持久化原子写、context 正确释放、preparing 阶段可暂停、停机优雅等待协程、会话查询写锁改读锁
  • 崩溃自动恢复:强杀/崩溃遗留的中间态任务重启自动重入队(downloading 断点续传);修复限速下载停滞与 30s 超时墙
  • IP 下载统计回填修复 + 自检修复:历史日志仅在 logs/ip_stats.json 为空时回填(杜绝与实时统计双写重叠导致的重复计数翻倍);回填按 (IP+文件) 60s 合并窗口折算,兼容修复前逐分片计数的旧日志;支持 .gz 轮转压缩日志。存量污染数据三种一键修复途径:IP 管理页「🧰 自检修复」(对账 + 一键重建)/ 启动参数 -rebuild-ipstats / 配置项 server.rebuild_ipstats_on_boot: true(均自动备份原文件 + 保留封禁状态)
  • 热力图热度分片修复:热力图与下载计数同源,旧版每个 Range 分片都会加一个 download 数据点导致近 7 天热度虚高;已改为仅 (IP+文件) 60s 逻辑下载记一点,升级后首次启动自动把存量污染点按同口径幂等压缩(先排序防乱序误删,share 等类型不受影响)
  • 文件统计(stats.json)历史重建:首页累计下载、文件列表次数、热力图读 config/stats.json,旧版每个分片 +1 次数/热力点并按整文件大小累加流量(实测次数虚高 12 倍、流量虚高约 690 倍);新增 -rebuild-stats / server.rebuild_stats_on_boot 与界面「🧰 自检修复」双卡(IP 统计 + 文件统计/热力图)各自对账重建,自动备份;分享计数按日志补齐(同 IP×同文件×同天去重口径,只增不删,见主 README #18)
⁠🧪 验证
  • 代码审查 18 项:18 项全部修复落地,0 遗留(详见《代码审查报告.md》)
  • 端到端黑盒 18/18、SSRF 6/6、公网多分块 sha256 一致、Range 206 精确、崩溃恢复实测通过、go build+go vet 零告警
⁠V1.2.0 版本内容
⁠🔐 密码安全升级(bcrypt哈希)
  • 新用户添加时自动使用 bcrypt 哈希密码
  • 修改密码时自动使用 bcrypt 哈希新密码
  • 现有用户登录成功后自动异步升级为 bcrypt 哈希(平滑迁移,不影响使用)
  • VerifyPassword 函数自动识别明文和bcrypt哈希,兼容现有配置
⁠🌐 IP下载管理系统(新增)
  • IP下载统计:自动记录每个IP的下载次数、总流量、首次/最后下载时间
  • IP封禁/解封:支持手动封禁和解封IP,被封禁IP无法下载文件
  • IP流量限额:支持配置每日/每小时下载次数和流量限制,超过限额返回429
  • 自动封禁:超过流量限额的IP可自动封禁
  • 历史日志回填:仅当 logs/ip_stats.json 尚无数据时,启动自动从历史日志重建 IP 统计(按 (IP+文件) 60s 合并窗口折算,兼容旧版分片日志,支持 .gz)——已有数据时跳过,避免同一下载被实时与回填重复计数(机制详见 V1.3.0)
  • 按最后下载时间降序排列,支持状态筛选和分页展示
⁠🔒 全面安全加固
  • XSS防护:自定义工具,HTML编码、危险标签清理、URL验证,全页面覆盖
  • CSRF防护:基于会话ID的令牌机制,支持表单和AJAX两种方式,登录表单也添加CSRF令牌
  • 路径遍历防护:8步严格验证,应用到所有路径相关操作
  • 会话管理:HttpOnly、SameSite、Secure属性,24小时自动过期
  • 下载任务API鉴权:会话鉴权+CSRF中间件,所有端点都在鉴权路由组中
  • 分类管理鉴权:分类API增加登录鉴权,防止普通用户改全站分类
⁠⬇️ 下载功能增强
  • 多线程下载:最大支持100线程,默认10线程
  • 断点续传与缓存块:支持断点续传,服务器挂了或任务暂停后可继续下载
  • 文件完整性验证:下载完成后自动验证(MD5/SHA256),避免下载出异常文件
  • 全文件类型图标体系:可执行文件(exe/msi/dll 等)启动后台预提取真实内嵌图标,运行期每 60 秒增量扫描(新上传/后台添加/拷入的 exe 自动提取),.ico 直接展示;其余文件按类型显示品牌色 SVG 图标(压缩包/文档/图片/视频/音频/代码等,替代 emoji);目录显示文件夹图标;分类图标同源(分类页签/管理端点选器均为同一套矢量图标,旧版分类 emoji 自动迁移);图标对所有人公开,无法判定/不存在/路径越界统一返回默认图标防探测
⁠⚡ 性能优化
  • Gzip压缩:压缩HTML、CSS、JavaScript等文本资源
  • 静态资源缓存:根据文件扩展名设置不同缓存时间
⁠📊 功能优化
  • 监控告警系统:CPU、内存、磁盘、请求量、错误率实时监控,合并到服务器信息页面
  • 跨平台磁盘监控:条件编译,Windows/Linux/Mac都能准确计算
  • 热力图页面修复:使用本地Chart.js,添加降级方案
  • 文件分类管理:自定义分类,前端按分类展示
  • 前端分页设计:文件列表支持分页
⁠🎨 界面全面重新设计
  • 前端:现代简洁风格(蓝白配色),卡片式布局,响应式设计
  • 后端:高级质感风格(Stripe风格),侧边栏导航,单页应用
⁠✅ 多协议下载
  • BitTorrent:已启用,支持磁力链接与种子文件,实时显示连接节点数
  • FTP:已启用,PASV被动模式 + RETR流式拉取(仅明文)
  • HTTP/HTTPS:标准实现,多线程加速与断点续传
  • ED2K:已移除(ED2K网络衰退,建议使用BT替代)

⁠🎯 功能特性

⁠🔐 权限管理系统
  • 四种登录角色:管理员(admin)、二级管理员(subadmin)、普通用户(normal)、下载专用(download-user,禁止网页登录,仅供下载引擎占位);另有未登录访客可浏览已解锁站点
  • 细粒度权限分配,基于Cookie的安全认证
  • 会话24小时自动过期,密码修改时失效相关会话
  • 全站解锁:任一顶级管理员同意免责协议后前端才展示文件(未解锁首页留白、下载通道 403)
  • 后台协议门控:管理员/二级管理员已登录但未同意协议时,访问任意后台路由被全局中间件重定向到 /terms
权限/功能管理员二级管理员普通用户访客
浏览前端文件(解锁后)✅✅✅✅
文件下载 / 分享短链(解锁后)✅✅✅✅
管理端文件列表(/files)✅✅❌❌
文件上传(直接发布 / 待审核)✅ 直接发布✅ 直接发布✅ 进待审区❌
创建目录 / 删除 / 批量操作✅✅❌❌
审核文件✅✅❌❌
用户管理✅❌❌❌
IP 管理(含自检修复)✅❌❌❌
查看日志 / 热力图 / 服务器信息✅✅❌❌
下载任务管理✅✅❌❌
分类管理(写)✅✅❌❌
⁠🌐 多协议下载
  • HTTP/HTTPS:多线程加速(最大100,默认10),断点续传,缓存块,完整性验证
  • BitTorrent:磁力链接/种子文件,做种,断点续传,实时节点数
  • FTP:PASV被动模式,流式拉取
  • 下载任务管理:创建/查看/控制,WebSocket实时推送,暂停/恢复/删除
⁠📁 文件管理
  • 文件上传:拖拽/批量/目录选择,文件大小验证,每日上传限制(普通用户20GB/日)
  • 文件下载:精确记录下载次数和带宽
  • 文件浏览:目录结构展示,按名称排序
  • 文件删除:单文件和批量删除
  • 目录管理:创建目录
  • 文件审核:自动进入待审核队列,管理员审核后发布,支持批量审核和拒绝
⁠📂 文件分类管理
  • 自定义分类:创建/编辑/删除分类
  • 文件归类:设置文件所属分类
  • 前端展示:按分类展示,分类筛选
  • 分类图标:每个分类从同一套矢量图标中选择(分类页签/管理端选择器同源)
⁠🔗 短链接功能
  • 按文件去重:同一文件永远只对应一条短链,防无限注入
  • 单IP限流:默认1分钟120条
  • 全局总量上限:默认5000条
  • 路径安全:生成前验证路径安全
  • 友好提示:短链不存在时3秒自动跳转首页
⁠👥 用户管理
  • bcrypt密码哈希存储,平滑迁移
  • 用户列表,权限验证,管理员保护
  • 密码管理,角色管理,并发安全
⁠🌐 IP下载管理
  • IP统计:下载次数、总流量、首次/最后下载时间
  • IP封禁/解封:手动封禁,输入原因,被封禁无法下载
  • 流量限额:每日/每小时次数和流量限制,429返回
  • 自动封禁:超过限额自动封禁
  • 历史回填:ip_stats.json 为空时启动自动从历史日志重建(60s 合并口径);数据被旧版重复计数污染时,在 IP 管理页「🧰 自检修复」 一键重建(界面自检后执行,自动备份 + 保留封禁),或启动参数 -rebuild-ipstats / 配置 server.rebuild_ipstats_on_boot: true 等效触发
  • 文件统计重建:首页累计/文件次数/热力图(stats.json)被旧版分片计数污染时,同样在「🧰 自检修复」**右卡「文件统计/热力图」**一键重建,或 -rebuild-stats / server.rebuild_stats_on_boot: true(自动备份 + 分享计数按日志补齐,只增不删)
  • 筛选分页:按状态筛选,分页展示,按最后下载时间排序
⁠📊 统计与监控
  • 下载统计:每个文件下载次数和时间
  • 分享统计:分享次数和时间
  • 带宽监控:精确记录下载流量
  • 热力图:Chart.js可视化活动趋势
  • 系统监控:CPU/内存/磁盘实时监控
  • 告警系统:阈值配置,自动触发告警
⁠📱 全平台响应式
  • 6级媒体查询断点,触摸友好交互
  • 响应式布局,横屏适配,可访问性支持
⁠🛡️ 安全防护
  1. XSS防护:HTML编码,危险标签清理,URL验证,全页面覆盖
  2. CSRF防护:安全令牌,常量时间比较,表单+AJAX双渠道,全操作覆盖(含登录表单)
  3. 路径遍历防护:8步严格验证,全路径覆盖
  4. 访问控制:严格权限验证,多角色支持
  5. 会话管理:HttpOnly,SameSite,Secure,24小时过期,密码修改失效
  6. 密码安全:bcrypt哈希存储,平滑迁移,兼容验证
  7. 混合内容修复:HTTPS环境下资源链接自动适配
  8. 反向代理真实IP:信任X-Forwarded-For,日志记录真实IP
  9. 文件安全:文件类型检查,大小限制,每日上传限制
  10. SSL支持:HTTPS加密传输
  11. SSRF防护:协议白名单,内网/回环/云元数据地址拒绝,拨号前真实 IP 校验(v1.3.0)
  12. 远程文件名安全:BT/FTP/HTTP 文件名统一清洗 + 安全落盘;下载任务管理仅管理员/二级管理员可用(v1.3.0)
⁠📝 日志系统
  • 五级日志:success/error/warning/debug/info
  • 结构化格式:时间戳、级别、用户名、角色、操作、详情
  • IP记录,日志筛选,日志持久化
  • 敏感信息脱敏:邮箱、手机号、身份证自动脱敏

⁠🚀 快速开始

⁠环境要求
  • Go 1.27+
  • Windows / Linux / macOS
⁠安装
⁠方式一:从源码编译
git clone https://github.com/gomail1/go-download.git
cd go-download
go build -o go-download .
./go-download
⁠方式二:Docker(推荐)

多架构镜像(amd64 + arm64),自动适配服务器架构。

docker pull gomail1/go_downloader:latest

docker run -d \
  --name go-download \
  --restart unless-stopped \
  -p 9980:9980 \
  -p 1443:1443 \
  -v /path/to/downloads:/app/downloads \
  -v /path/to/pending:/app/pending \
  -v /path/to/logs:/app/logs \
  -v /path/to/config:/app/config \
  -v /path/to/ssl:/app/ssl \
  -e TZ=Asia/Shanghai \
  gomail1/go_downloader:latest

Docker Compose:

version: '3.8'
services:
  go-download-server:
    image: gomail1/go_downloader:latest
    container_name: go-download-server
    restart: unless-stopped
    ports:
      - "9980:9980"
      - "1443:1443"
    volumes:
      - ./downloads:/app/downloads
      - ./pending:/app/pending
      - ./logs:/app/logs
      - ./config:/app/config
      - ./ssl:/app/ssl
    environment:
      - TZ=Asia/Shanghai

GHCR镜像:

docker pull ghcr.io/gomail1/go-download:latest
⁠配置

首次运行自动生成config/config.json。

⁠配置项说明

用户配置 (users)

配置项说明
username用户名
password密码(bcrypt哈希存储,新用户自动哈希)
roleadmin/subadmin/normal
max_file_size最大文件大小(字节,0无限制)

服务器配置 (server)

配置项说明默认值
portHTTP端口9980
https_portHTTPS端口1443
cert_fileSSL证书路径-
key_fileSSL私钥路径-
download_dir下载目录downloads
pending_dir待审核目录pending
log_dir日志目录logs
trust_proxy信任反向代理false
api_keyAPI密钥(首次启动自动生成)-
server_name服务器名称Go下载站
⁠默认账号
  • 管理员:admin / admin123(首次登录后自动升级为bcrypt哈希,请及时修改)
⁠访问

⁠📡 API 文档

⁠公开接口
GET  /api/stats                    # 获取统计信息
POST /api/increment-share?path=   # 增加分享计数(匿名)
GET  /api/categories               # 获取分类列表
GET  /api/get-custom-sort?path=   # 获取自定义排序
⁠需要鉴权的接口

需要登录会话(Cookie)+ CSRF令牌(X-CSRF-Token头或csrf_token表单字段)

文件操作

POST /delete        # 删除文件
POST /batch-delete  # 批量删除
POST /batch-move    # 批量移动
POST /batch-copy    # 批量复制
POST /mkdir         # 创建目录
POST /upload        # 上传文件

用户管理

POST /add-user        # 添加用户(密码自动bcrypt哈希)
POST /change-password # 修改密码(自动bcrypt哈希)
POST /delete-user     # 删除用户

分类管理

POST   /api/categories       # 创建分类
PUT    /api/categories/:id   # 更新分类
DELETE /api/categories/:id   # 删除分类
POST   /api/file-category     # 设置文件分类

下载任务管理(Gin路由,需管理员/二级管理员)

GET    /api/tasks            # 任务列表
POST   /api/tasks            # 创建任务
POST   /api/tasks/upload     # 上传种子文件
GET    /api/tasks/:id        # 任务详情
PUT    /api/tasks/:id/pause  # 暂停
PUT    /api/tasks/:id/resume # 恢复
DELETE /api/tasks/:id        # 删除
GET    /ws/events            # WebSocket实时推送

审核管理

POST /approve  # 审核通过
POST /reject   # 审核拒绝

⁠📁 项目结构

go-download/
├── main.go                 # 主程序入口
├── middleware.go           # 中间件(Gzip、缓存、安全头)
├── config/                 # 配置管理
├── constants/              # 常量定义
├── session/                # 会话管理(含bcrypt密码哈希)
├── handlers/               # HTTP处理器
│   ├── files.go           # 文件列表、浏览、搜索
│   ├── download.go        # 文件下载
│   ├── upload.go          # 文件上传
│   ├── login.go           # 登录登出(含CSRF)
│   ├── admin.go           # 管理后台
│   ├── user.go            # 用户管理
│   ├── ip_admin.go        # IP管理
│   ├── info.go            # 服务器信息
│   ├── heatmap.go         # 热力图
│   └── ...
├── internal/               # 内部模块
│   ├── api/               # 下载任务API(Gin)
│   └── core/              # 下载引擎核心
├── protocols/              # 下载协议
│   ├── httpx/             # HTTP/HTTPS
│   ├── bt/                # BitTorrent
│   └── ftp/               # FTP
├── utils/                  # 工具函数
│   ├── xss.go             # XSS防护
│   ├── csrf.go            # CSRF防护
│   ├── path_security.go   # 路径安全
│   ├── icon_extractor.go  # 可执行文件图标提取(PE)
│   ├── icon_type.go       # 全文件类型 + 分类 SVG 图标体系
│   └── ...
├── static/                 # 静态资源
├── config/                 # 配置目录(运行时自动创建)
│   ├── config.json        # 主配置
│   ├── categories.json    # 分类数据
│   └── icons/             # 图标缓存
├── downloads/              # 下载文件目录
├── pending/                # 待审核目录
├── logs/                   # 日志目录
├── README.md               # 完整版文档(含操作演示)
└── README_LITE.md          # 简化版文档

⁠🛠️ 技术栈

后端

  • Go 1.27+
  • net/http(主服务)+ Gin(下载任务API)
  • JSON文件存储(无需外部数据库)
  • gorilla/websocket(实时推送)
  • sirupsen/logrus(结构化日志)
  • golang.org/x/crypto(bcrypt密码哈希)
  • disintegration/imaging(图标处理)
  • anacrolix/torrent(BitTorrent下载)

前端

  • 原生 HTML + CSS + JavaScript(无框架依赖)
  • Chart.js(本地部署)
  • 6级响应式断点

安全

  • XSS / CSRF / 路径遍历防护
  • bcrypt密码哈希
  • HttpOnly / SameSite / Secure Cookie
  • 独立API Key

运维

  • Docker多架构镜像(amd64+arm64)
  • Gzip压缩,静态资源缓存
  • 跨平台系统监控

⁠🧪 测试

go test ./...          # 运行所有测试
go test ./utils/...    # 运行指定包测试

⁠🤝 贡献

提交规范:feat(新功能)、fix(修复)、docs(文档)、style(格式)、refactor(重构)、test(测试)、chore(构建/依赖)

⁠📄 许可证

MIT 许可证

⁠📞 联系方式


注意:本项目仅供学习和研究使用,请遵守当地法律法规。

Tag summary

Content type

Image

Digest

sha256:2f832ccd5…

Size

19.5 MB

Last updated

27 days ago

docker pull gomail1/go_downloader