使用Go语言开发的高性能文件下载站,提供文件上传、下载、浏览、审核和管理功能,支持基于角色的用户权限控制、全平台响应式设计、多协议下载功能,以及完善的安全防护和监控告警系统。
GitHub仓库: https://github.com/gomail1/go-download Docker仓库: https://hub.docker.com/r/gomail1/go_downloader
09-07 / 09-08 后续修复请以主 README「最新更新」#14–#18 为准:全站解锁与角色权限模型(未解锁首页留白、普通用户仅上传待审)、download-user 下载专用账号锁定与二级管理员配额无限制、文件夹上传层级保留、后台协议同意全局门控、下载通道纳入站点锁(未解锁
/download/s/403)、单删保留 pending、日志动作中文化、首页分享计数漏接修复、分享计数同 IP×文件×天 去重 + 自检修复按日志补齐历史分享等。
file://、内网/回环/云元数据地址;拨号前校验真实 IP,防 DNS rebinding 与重定向绕过../、控制字符、保留名、长度截断),落盘统一安全拼接校验,杜绝路径穿越/stats 死路由Read 同返数据与 EOF 时丢弃末轮数据)downloading 断点续传);修复限速下载停滞与 30s 超时墙logs/ip_stats.json 为空时回填(杜绝与实时统计双写重叠导致的重复计数翻倍);回填按 (IP+文件) 60s 合并窗口折算,兼容修复前逐分片计数的旧日志;支持 .gz 轮转压缩日志。存量污染数据三种一键修复途径:IP 管理页「🧰 自检修复」(对账 + 一键重建)/ 启动参数 -rebuild-ipstats / 配置项 server.rebuild_ipstats_on_boot: true(均自动备份原文件 + 保留封禁状态)config/stats.json,旧版每个分片 +1 次数/热力点并按整文件大小累加流量(实测次数虚高 12 倍、流量虚高约 690 倍);新增 -rebuild-stats / server.rebuild_stats_on_boot 与界面「🧰 自检修复」双卡(IP 统计 + 文件统计/热力图)各自对账重建,自动备份;分享计数按日志补齐(同 IP×同文件×同天去重口径,只增不删,见主 README #18)go build+go vet 零告警VerifyPassword 函数自动识别明文和bcrypt哈希,兼容现有配置logs/ip_stats.json 尚无数据时,启动自动从历史日志重建 IP 统计(按 (IP+文件) 60s 合并窗口折算,兼容旧版分片日志,支持 .gz)——已有数据时跳过,避免同一下载被实时与回填重复计数(机制详见 V1.3.0).ico 直接展示;其余文件按类型显示品牌色 SVG 图标(压缩包/文档/图片/视频/音频/代码等,替代 emoji);目录显示文件夹图标;分类图标同源(分类页签/管理端点选器均为同一套矢量图标,旧版分类 emoji 自动迁移);图标对所有人公开,无法判定/不存在/路径越界统一返回默认图标防探测/terms| 权限/功能 | 管理员 | 二级管理员 | 普通用户 | 访客 |
|---|---|---|---|---|
| 浏览前端文件(解锁后) | ✅ | ✅ | ✅ | ✅ |
| 文件下载 / 分享短链(解锁后) | ✅ | ✅ | ✅ | ✅ |
管理端文件列表(/files) | ✅ | ✅ | ❌ | ❌ |
| 文件上传(直接发布 / 待审核) | ✅ 直接发布 | ✅ 直接发布 | ✅ 进待审区 | ❌ |
| 创建目录 / 删除 / 批量操作 | ✅ | ✅ | ❌ | ❌ |
| 审核文件 | ✅ | ✅ | ❌ | ❌ |
| 用户管理 | ✅ | ❌ | ❌ | ❌ |
| IP 管理(含自检修复) | ✅ | ❌ | ❌ | ❌ |
| 查看日志 / 热力图 / 服务器信息 | ✅ | ✅ | ❌ | ❌ |
| 下载任务管理 | ✅ | ✅ | ❌ | ❌ |
| 分类管理(写) | ✅ | ✅ | ❌ | ❌ |
-rebuild-ipstats / 配置 server.rebuild_ipstats_on_boot: true 等效触发-rebuild-stats / server.rebuild_stats_on_boot: true(自动备份 + 分享计数按日志补齐,只增不删)git clone https://github.com/gomail1/go-download.git
cd go-download
go build -o go-download .
./go-download
多架构镜像(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哈希存储,新用户自动哈希) |
| role | admin/subadmin/normal |
| max_file_size | 最大文件大小(字节,0无限制) |
服务器配置 (server)
| 配置项 | 说明 | 默认值 |
|---|---|---|
| port | HTTP端口 | 9980 |
| https_port | HTTPS端口 | 1443 |
| cert_file | SSL证书路径 | - |
| key_file | SSL私钥路径 | - |
| download_dir | 下载目录 | downloads |
| pending_dir | 待审核目录 | pending |
| log_dir | 日志目录 | logs |
| trust_proxy | 信任反向代理 | false |
| api_key | API密钥(首次启动自动生成) | - |
| server_name | 服务器名称 | Go下载站 |
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 test ./... # 运行所有测试
go test ./utils/... # 运行指定包测试
提交规范:feat(新功能)、fix(修复)、docs(文档)、style(格式)、refactor(重构)、test(测试)、chore(构建/依赖)
MIT 许可证
注意:本项目仅供学习和研究使用,请遵守当地法律法规。
Content type
Image
Digest
sha256:2f832ccd5…
Size
19.5 MB
Last updated
27 days ago
docker pull gomail1/go_downloader