# Go HTTP服务器下载站 - V1.0.0
使用Go语言开发的高性能文件下载站,提供文件上传、下载、浏览、审核和管理功能,支持基于角色的用户权限控制、全平台响应式设计,以及多协议下载功能。
**GitHub仓库链接**: https://github.com/gomail1/go-download
**Docker仓库链接**: https://hub.docker.com/r/gomail1/go_downloader
## 📢 最新更新
### V1.0.0 版本内容 (2026-02-02)
#### ✅ Bug修复
1. **修复分享链接中包含空格时的文件查找问题**
- 修复了分享链接中包含空格时无法找到文件的问题
- 确保分享链接中的空格能被正确处理,不再显示为 + 号
- 提高了分享功能的可靠性,确保文件能被正确找到
2. **优化下载链接格式**
- 改进了下载链接的生成方式,使用下划线而不是 + 号表示空格
- 确保下载链接格式美观易读,提升用户体验
- 保持了下载功能的稳定性,确保文件能被正确找到
3. **优化浏览器下载时的文件名显示**
- 改进了浏览器下载时显示的文件名格式
- 确保下载文件名中的空格能正确显示,不再显示为 + 号
- 提升了下载体验,显示更清晰的文件名
4. **修复密码支持所有符号**
- 移除了密码字符限制,现在支持所有符号
- 提高了密码的安全性,允许使用更复杂的密码
- 保持了密码长度限制(6-30个字符),确保密码安全性
#### ✅ 核心功能更新
1. **版本号升级**
- 从 v0.0.9 升级到 v1.0.0
- 标志着系统进入稳定版本阶段
- 系统功能已完善,达到生产环境使用标准
#### 📱 UI/UX优化
1. **链接美观性优化**
- 分享按钮生成的链接现在使用下划线而不是 + 号,格式更加美观
- 下载按钮生成的链接现在使用下划线而不是 + 号,提升可读性
- 浏览器下载时显示的文件名中不会再出现 + 号,而是显示正常的空格
- 整体链接格式更加美观易读,提升用户体验
#### 🔧 技术优化
1. **系统稳定性提升**
- 优化了系统代码,提高了整体稳定性
- 确保了空格处理的一致性,提升了系统可靠性
- 增强了系统的容错能力,减少了错误发生
2. **兼容性增强**
- 保持了与现有配置的兼容性,无需修改配置
- 确保了与之前版本的功能一致性,支持平滑升级
- 提升了系统的适应性,更好地满足用户需求
### 历史版本概述
| 日期 | 版本 | 主要更新内容 |
|------------|----------|------------------------------------------------------------------------------|
| 2026-02-02 | **v1.0.0** | 修复分享链接和下载链接中的空格处理问题,优化浏览器文件名显示,版本号升级到1.0.0,系统进入稳定版本阶段 |
| 2026-01-19 | **v0.0.9** | 实现无需登录的下载和分享功能,优化搜索结果页面,添加页脚信息可配置化,更新页脚年份为2025-2026,优化配置加载逻辑 |
| 2025-12-29 | **v0.0.8** | 实现核心功能更新(文件列表自定义排序、导航栏名称自定义、热力图统计优化、文件图标优化),修复BUG(移动端适配、热力图统计、Docker IP记录),以及多项性能优化(批量写入、热力图数据过期、自动化工具检测、读写锁分离、文件缓存、内存优化、统计数据清理) |
| 2025-12-28 | **v0.0.7** | 实现权限管理优化、多协议下载集成、完整的免责协议功能和全面的UI/UX优化 |
| 2025-12-24 | **v0.0.6** | 实现移动端适配优化,包括6级媒体查询断点、触摸友好交互、响应式表格设计等 |
| 2025-12-21 | **v0.0.5** | 实现智能日志级别分类系统、搜索栏支持、热力图统计功能、API统计接口等 |
| 2025-12-20 | **v0.0.4** | 实现每日上传限制功能、优化错误处理机制、改进界面布局 |
| 2025-12-19 | **v0.0.3** | 添加管理员批量操作功能、增强文件上传体验、优化界面设计 |
| 2025-12-18 | **v0.0.2** | 优化日志系统、增强服务器信息页面、改进项目结构 |
| 2025-12-18 | **v0.0.1** | 实现基础功能、用户角色系统、文件审核机制,建立系统核心框架 |
## 🎯 功能特性
### 🔐 权限管理系统
- **多角色权限控制**:支持管理员、二级管理员、普通用户和访客四种角色
- **细粒度权限分配**:针对不同角色分配不同的操作权限(查看文件、上传、下载、删除、创建目录、审核文件、用户管理、查看日志、查看统计信息)
- **会话管理**:基于Cookie的安全认证机制,支持会话过期自动清理(24小时有效期)
- **默认子用户**:自动创建 `download-user` 子用户,用于接收下载任务文件,无登录权限
#### 用户角色权限对照表
| 权限/功能 | 管理员 | 二级管理员 | 普通用户 | 访客 |
|---------------|--------|------------|----------|------|
| 查看文件列表 | ✅ | ✅ | ✅ | ✅ |
| 文件下载 | ✅ | ✅ | ✅ | ✅ |
| 文件分享 | ✅ | ✅ | ✅ | ✅ |
| 文件上传 | ✅ | ✅ | ✅ | ❌ |
| 创建目录 | ✅ | ✅ | ✅ | ❌ |
| 删除文件 | ✅ | ✅ | ❌ | ❌ |
| 审核文件 | ✅ | ✅ | ❌ | ❌ |
| 用户管理 | ✅ | ✅ | ❌ | ❌ |
| 查看日志 | ✅ | ✅ | ❌ | ❌ |
| 查看统计信息 | ✅ | ✅ | ❌ | ❌ |
| 无限制上传 | ✅ | ✅ | ❌ | ❌ |
| 下载任务管理 | ✅ | ✅ | ❌ | ❌ |
### 🌐 多协议下载功能
- **多协议支持**:当前版本支持 HTTP/HTTPS 协议
- **多线程加速**:支持多线程下载,提高下载速度
- **断点续传**:支持断点续传功能,保障下载可靠性
- **下载任务管理**:
- 支持创建、查看、控制下载任务
- 实时显示任务状态、进度、速度等信息
- 支持暂停、恢复、删除下载任务
- 提供任务详情页面,显示完整任务信息
- **随机端口生成**:为 BitTorrent 添加随机端口生成功能,防止 ISP 封锁
- **自动审核机制**:所有下载文件默认归属于 `download-user` 子用户,自动进入待审核队列
### 📁 文件管理功能
- **文件上传**:支持拖拽上传、批量上传和目录选择,带有文件大小验证和每日上传限制
- 普通用户:20GB/日上传限制
- 管理员:无限制上传
- 实时显示上传进度和今日剩余空间
- **文件下载**:支持单文件下载,精确记录下载次数和带宽消耗
- **文件浏览**:清晰的文件目录结构展示,支持按名称排序
- **文件删除**:支持单文件和批量删除,管理员和二级管理员都有权限
- **目录管理**:支持创建目录,方便文件分类管理
- **文件审核**:上传和下载文件自动进入待审核队列,需要管理员审核才能发布
- 审核流程:用户上传/系统下载 → 存储到pending/[username]/目录 → 管理员审核 → 移动到downloads/目录对外发布
- 审核提醒:实时显示待审核文件数量,管理员可快速查看待审核文件
- 拒绝机制:支持拒绝文件上传/下载请求,自动清理待审核文件
- 批量审核:支持批量处理待审核文件
### 📄 免责协议功能
- **首次登录确认**:用户首次登录时必须同意免责协议
- **同意状态持久化**:同意状态保存到配置文件,后续登录无需再次确认
- **访问控制**:未同意协议的用户无法使用系统功能
- **版本管理**:支持免责协议版本更新,版本变更时重新要求用户确认
- **清晰的条款展示**:使用易于阅读的格式展示完整的免责协议
- **滚动强制阅读**:要求用户滚动到页面底部才能点击同意按钮
- **明确的操作按钮**:"同意"和"取消"按钮,样式鲜明
### 👥 用户管理系统
- **用户认证**:基于Cookie的安全认证机制,支持密码验证
- **用户列表**:管理员可查看系统所有用户信息,二级管理员只能查看普通用户
- **权限验证**:实时验证用户权限,确保操作安全性
- **管理员保护**:超级管理员账号默认不可删除,对二级管理员隐藏
- **密码管理**:支持修改用户密码,二级管理员只能修改普通用户密码
- **角色管理**:管理员可创建、修改和删除所有角色用户,二级管理员只能创建和管理普通用户
### 📊 统计与监控功能
- **下载统计**:精确记录每个文件的下载次数和最后下载时间
- **分享统计**:跟踪文件分享活动,记录分享次数和最后分享时间
- **带宽监控**:精确记录文件下载流量,帮助管理员了解带宽使用情况
- **热力图可视化**:图形化展示文件活动趋势,支持按时间维度查看
#### 热力图统计面板
为管理员提供直观的数据可视化功能,帮助了解文件分享和下载活动趋势:
1. **活动趋势图**:使用Chart.js创建的柱状图,展示最近7天的文件分享和下载活动趋势
2. **文件统计表**:详细的文件统计数据表格,包括文件路径、分享次数、下载次数、最后分享时间和最后下载时间
3. **实时数据**:数据实时更新,反映最新的文件使用情况
4. **管理员与二级管理员专享**:只有管理员和二级管理员角色可以访问,确保数据安全性
热力图数据收集包括:
- 文件分享事件
- 文件下载事件
- 用户上传事件
- 管理员操作事件
所有数据都会经过标准化处理,确保路径一致性,并且会定期合并重复条目以保持数据准确性。
### 📱 全平台响应式设计
- **6级媒体查询断点**:覆盖从超小手机(360px)到桌面端(1025px+)的所有设备
- **触摸友好交互**:所有交互元素符合44x44px触摸目标尺寸,优化移动操作体验
- **响应式布局**:根据屏幕尺寸自动调整界面元素,确保在各种设备上都有良好的显示效果
- **横屏适配**:优化手机横屏模式的布局和可用性,提高大屏幕利用率
- **可访问性支持**:支持用户缩放,确保不同用户的使用需求
### 🛡️ 安全防护措施
- **访问控制**:严格的权限验证和访问控制,防止未授权访问
- **输入验证**:全面的输入参数验证和过滤,防止恶意输入
- **文件校验**:上传文件的类型和大小限制,确保系统安全
- **防注入攻击**:防范常见的Web攻击手段,保护系统安全
- **路径安全**:严格的路径验证,防止目录遍历攻击
- **会话管理**:
- 基于HttpOnly Cookie的安全会话机制
- 24小时会话自动过期
- 密码修改时自动失效相关会话
- 定期清理过期会话
- 会话中存储用户权限信息,减少权限检查开销
- **密码安全**:密码哈希存储,防止密码泄露
- **CSRF防护**:使用会话ID进行CSRF防护
- **SSL支持**:支持HTTPS加**输,保护数据安全
### 📝 日志系统
- **多级日志记录**:支持success、error、warning、debug和info五种日志级别
- **详细日志内容**:记录用户操作、系统事件和错误信息
- **日志筛选功能**:支持按日期和日志级别筛选日志
- **日志持久化**:日志信息持久化存储,便于后续查询和分析
- **结构化日志格式**:包含时间戳、级别、用户名、角色、操作和详情
- **日志倒序显示**:最新日志显示在前面,方便查看
- **智能滚动**:页面加载时自动滚动到顶部,确保看到最新日志
- **历史日志回溯**:支持通过日期选择器查看特定日期的日志文件,便于回溯历史操作和系统事件
- 默认显示当天日志
- 通过日期选择器可选择任意历史日期
- 系统自动加载对应日期的日志文件
- 支持日志文件轮转,按日期命名(如:server_20251228.log)
### 📊 服务器信息展示
- **系统运行时间**:显示服务器已运行的时间
- **当前时间**:显示服务器当前时间
- **待审核文件数量**:实时显示待审核文件数量,方便管理员及时处理
- **系统信息显示**:显示操作系统、架构、Go版本、CPU核心数等
- **服务器配置显示**:显示端口、下载目录、待审核目录等
- **项目信息显示**:显示项目名称、版本、开发者、启动时间等
- **内存使用信息**:显示当前协程数
- **用户角色权限表**:清晰展示不同角色的权限对比
- **使用说明**:添加了系统使用说明
## 📊 API统计接口
系统提供RESTful API接口供第三方系统集成:
- 获取所有文件的统计信息(JSON格式)
- 数据包含下载次数、分享次数、带宽使用等详细信息
- JSON格式返回,便于程序解析和处理
- 支持API调用鉴权,仅管理员和二级管理员可以访问
### 🔐 API鉴权说明
#### 鉴权范围
- **管理员**:可以完全访问所有API接口
- **二级管理员**:可以完全访问所有API接口
- **普通用户/访客**:无法访问API接口
#### 访问方式
1. **网页界面访问**:
- 已登录的管理员或二级管理员通过网页界面访问API接口时,无需额外鉴权
- 系统会自动通过会话信息验证用户身份和权限
2. **其他渠道访问**(如curl、第三方工具等):
- 需要通过Authorization请求头进行鉴权
- 鉴权值为管理员或二级管理员的密码
- 格式:`Authorization: <密码>`
#### 第三方工具Authorization头验证说明
"Authorization头验证"是一种HTTP请求认证方式,它允许第三方工具(如curl、Postman、脚本程序等)在发送HTTP请求时,通过请求头信息提供身份验证凭证。
**通俗解释**:
- 当您使用浏览器访问系统时,浏览器会自动保存登录信息(会话Cookie)
- 但当您使用curl或其他命令行工具访问API时,这些工具不会自动保存登录信息
- 因此需要手动在HTTP请求中添加一个名为"Authorization"的头部,并在其中填入您的管理员/二级管理员密码
- 服务器会检查这个请求头中的密码是否正确,从而验证您的身份
**使用场景**:
- 编写自动化脚本定期获取统计信息
- 使用监控工具跟踪系统状态
- 与其他系统进行集成对接
- 开发自定义客户端工具
### 🛡️ 安全防护说明
系统针对API访问实现了严格的安全防护机制:
**核心防护措施**:
- **IP级限制**:单个IP默认最多允许5次失败验证尝试
- **自动封禁机制**:超过失败阈值后,IP将被自动封禁5分钟
- **智能计数管理**:封禁期结束后保留失败记录,防止重复攻击
- **IPv6完整支持**:正确处理所有IP类型,确保防护无死角
**安全建议**:
- 使用强密码(包含大小写字母、数字和特殊字符)
- 定期更换密码
- 避免使用与其他系统相同的密码
### 🔄 数据处理机制
- **自动去重**:自动合并重复统计条目,确保数据准确性
- **数据清理**:定期清理任务,保持统计数据的一致性
- **路径识别**:支持子目录文件路径的正确识别和统计
- **持久化存储**:数据持久化存储到本地文件,重启服务后数据不丢失
## 🐳 Docker部署方案
### 1. 多架构镜像支持
系统提供多架构 Docker 镜像,支持不同平台的部署:
| 架构 | 标签 | 适用平台 |
|------|------|----------|
| X86_64 | `latest` | 大多数服务器和桌面电脑 |
| ARM64 | `latest-arm64` | 树莓派 4、苹果 M 系列芯片、ARM 服务器等 |
### 2. 常规Docker部署
#### X86_64 架构部署
```yaml
version: '3.8'
services:
go-download-server:
# Docker Hub镜像
image: gomail1/go_downloader:latest
# 备选镜像源:GitHub Container Registry
# image: ghcr.io/gomail1/go-download: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
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
ARM64 架构部署
version: '3.8'
services:
go-download-server:
# Docker Hub镜像
image: gomail1/go_downloader:latest-arm64
# 备选镜像源:GitHub Container Registry
# image: ghcr.io/gomail1/go-download:latest-arm64
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
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
3. 飞牛专用部署
X86_64 架构部署
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:
- /vol1/1000/docker/go-download/downloads:/app/downloads
- /vol1/1000/docker/go-download/pending:/app/pending
- /vol1/1000/docker/go-download/logs:/app/logs
- /vol1/1000/docker/go-download/config:/app/config
- /vol1/1000/docker/go-download/ssl:/app/ssl
environment:
- TZ=Asia/Shanghai
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
ARM64 架构部署
version: '3.8'
services:
go-download-server:
image: gomail1/go_downloader:latest-arm64
container_name: go-download-server
restart: unless-stopped
ports:
- "9980:9980"
- "1443:1443"
volumes:
- /vol1/1000/docker/go-download/downloads:/app/downloads
- /vol1/1000/docker/go-download/pending:/app/pending
- /vol1/1000/docker/go-download/logs:/app/logs
- /vol1/1000/docker/go-download/config:/app/config
- /vol1/1000/docker/go-download/ssl:/app/ssl
environment:
- TZ=Asia/Shanghai
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
🚀 快速开始
1. 访问系统
- HTTP地址: http://服务器IP:9980
- HTTPS地址: https://服务器IP:1443
- 默认管理员账号: admin / admin123
🎬 操作界面演示 (V0.0.3)
以下是系统主要功能的操作界面演示:
1. 公众主界面

2. 上传界面

3. 管理员界面

4. 创建目录

5. 用户上传界面

6. 管理员审核提醒

7. 管理员审核目录

8. 用户管理界面

9. 详细日志

10. 服务器信息

11. 热力图统计面板

🔧 技术实现
核心架构
- 纯Go实现: 使用Go标准库开发,无需额外的数据库依赖
- 模块化设计: 清晰的分层架构(config、constants、handlers等模块)
- 高性能: 利用Go的并发特性,支持高并发请求处理
- 多协议集成: 当前版本支持 HTTP/HTTPS 下载协议
配置管理
- 自动配置: 首次运行自动生成config.json配置文件
- 命令行参数: 支持通过命令行参数覆盖配置(端口、证书文件等)
- 环境变量支持: 支持通过环境变量配置服务器参数
- 默认配置: 内置默认配置,确保服务能快速启动
- 配置集成: 统一管理配置文件,优化配置结构
- 多协议下载配置
- 随机端口设置
- 日志级别配置
- 免责协议配置
服务器特性
- 容器化部署: 使用Docker容器化技术,简化部署和管理
- 跨平台支持: 支持Windows、Linux和Mac系统
- 双协议支持: 同时支持HTTP和HTTPS访问
- 持久化存储: 支持数据持久化到主机文件系统
- 并发处理: 利用Go的goroutine特性,支持高并发文件传输
- 自动目录创建: 自动创建必要的目录结构(downloads、pending、logs等)
- 子用户自动创建: 系统初始化时自动创建
download-user 子用户,用于接收下载任务文件
启动流程
- 解析命令行参数和环境变量
- 加载配置文件(如不存在则使用默认配置)
- 初始化必要的目录结构
- 自动创建
download-user 子用户
- 初始化下载引擎
- 注册HTTP处理函数
- 启动HTTP服务器
- 启动HTTPS服务器(如果证书存在)
命令行参数
-port: 指定HTTP端口(默认:9980)
-https-port: 指定HTTPS端口(默认:1443)
-cert-file: 指定SSL证书文件路径
-key-file: 指定SSL密钥文件路径
环境变量
PORT: 设置HTTP端口
HTTPS_PORT: 设置HTTPS端口
SSL_CERT_FILE: 设置SSL证书文件路径
SSL_KEY_FILE: 设置SSL密钥文件路径
TZ: 设置时区(如Asia/Shanghai)
下载引擎集成详情
- 代码集成: 核心代码作为内部包使用,实现多协议下载功能
- API 路由集成: 注册下载引擎 API 路由,统一路由管理
- 日志整合: 将下载引擎日志整合到现有日志系统中,统一日志格式和存储位置
- UI 统一: 将下载功能集成到现有 Web 界面中,保持 UI 风格一致
- 审核机制集成: 将子用户下载文件接入现有审核流程
📝 开发说明
此项目使用纯Go标准库开发,无需额外的数据库依赖。所有文件操作都是直接文件系统操作,适合中小型文件分享场景。系统架构清晰,代码结构模块化,便于维护和扩展。
❓ 常见问题解答
1. Q: 如何修改默认端口和证书文件路径?
A: 可以通过命令行参数或环境变量来修改:
# 命令行参数
./go-download-server -port 8080 -https-port 8443 -cert-file /path/to/cert.crt -key-file /path/to/key.key
# 或环境变量
PORT=8080 HTTPS_PORT=8443 ./go-download-server
2. Q: 如何重置管理员密码?
A: 删除 config/config.json文件中的相关用户条目,系统将在重启后自动生成默认管理员账户。
3. Q: 如何限制上传文件的大小?
A: 在 config/config.json中修改 max_upload_size参数(单位:字节)。
4. Q: 上传的文件存放在哪里?
A: 文件存放在 downloads目录中,待审核文件存放在 pending/[用户名]/目录中。
5. Q: 如何获取API统计数据?
A: 访问 /api/stats接口获取JSON格式的统计数据。
6. Q: Docker容器重启后数据会丢失吗?
A: 不会,只要正确映射了volumes卷,数据会持久化到主机文件系统。
7. Q: 如何设置自动备份?
A: 目前系统没有内置备份功能,建议通过系统层面的定时任务备份 downloads和 config目录。
8. Q: 系统支持中文文件名吗?
A: 完全支持,系统内部使用UTF-8编码处理所有文件路径和名称。
9. Q: 系统支持哪些下载协议?
A: 系统当前版本支持 HTTP/HTTPS 协议的下载功能。
10. Q: 如何使用多协议下载功能?
A: 登录系统后,在导航菜单中点击"下载管理" → "新建下载",填写下载链接和相关配置,点击"开始下载"即可。
11. Q: 为什么下载的文件需要审核?
A: 为了保证系统安全,所有通过系统下载的文件默认归属于 `download-user` 子用户,自动进入待审核队列,需要管理员审核后才能发布到前端界面。
12. Q: 如何修改 BitTorrent 端口?
A: 可以在系统设置页面中修改 BitTorrent 端口,支持手动输入或生成随机端口。
13. Q: 是否首次登录需要同意免责协议?
A: 为了明确用户使用系统的责任和义务,系统要求首次登录的用户必须同意免责协议。同意后,后续登录无需再次确认。
14. Q: 如何查看下载任务的详细信息?
A: 在下载任务列表页面中,点击任务的"查看"按钮,即可进入任务详情页面,查看完整的任务信息。
15. Q: 下载任务支持断点续传吗?
A: 是的,系统支持断点续传功能,当下载中断后,可以恢复下载进度。
🤝 贡献指南
欢迎参与项目开发!如果您想为该项目贡献代码或报告问题
免责声明(DISCLAIMER)
- 本项目仅为技术学习与交流目的提供,开发者不对项目的可用性、稳定性、安全性做任何明示或暗示的保证。
- 用户使用本项目时,应严格遵守所在地区法律法规,不得用于存储、传播任何违法、侵权、**等违规内容。因用户不当使用导致的一切法律责任,均由用户自行承担,与开发者无关。
- 对于使用本项目过程中可能出现的数据丢失、文件损坏、服务器故障等问题,开发者不承担任何直接或间接的赔偿责任。
- 请用户自行做好数据备份、安全防护等措施,谨慎使用本项目。
📄 许可证
MIT License