Go HTTP服务器下载站

admin
# Go HTTP服务器下载站 - V0.0.6

使用Go语言开发的高性能文件下载站,提供文件上传、下载、浏览、审核和管理功能,支持基于角色的用户权限控制和全平台响应式设计。

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

## ???? 最新更新

### V0.0.6 版本内容 (2025-12-23)

#### ???? 移动端适配优化
- ✅ **6级媒体查询断点**:实现从超小手机(360px)到桌面端(1025px+)的完整断点体系
- ✅ **触摸友好交互**:所有交互元素符合44x44px触摸目标尺寸,触摸设备自动禁用悬停效果
- ✅ **响应式表格设计**:平板水平滚动、手机卡片式布局、横屏保持表格形式
- ✅ **Flexbox布局优化**:智能导航栏和搜索框排序,小屏幕垂直居中排列
- ✅ **横屏适配**:全面优化手机横屏模式的布局和可用性
- ✅ **Viewport配置更新**:支持用户缩放,解决iPhone等设备显示问题
- ✅ **字体可读性提升**:使用clamp()实现响应式字体,调整行高至1.6
- ✅ **性能优化**:简化移动端动画效果,优化响应式图片加载
- ✅ **移动端BUG修复**:解决搜索框、按钮和目录创建表单溢出屏幕问题
- ✅ **按钮交互优化**:修复按钮文本重叠问题,统一按钮最小宽度为100px

#### ???? 界面优化与统一
- ✅ **导航菜单标准化**:统一所有页面导航菜单高度为1897×41px,修复1897×55和1897×75px的高度差异
- ✅ **搜索功能精简**:移除用户管理界面和热力图界面的不必要搜索功能
- ✅ **用户信息统一**:所有页面标准化显示用户信息
- ✅ **LOGO统一**:修复管理员和热力图页面的LOGO显示问题
- ✅ **导航链接优化**:修正导航链接路径
- ✅ **角色权限显示标准化**:统一所有页面的角色权限展示格式

#### ???? BUG修复
- ✅ **CSS选择器匹配问题**:修复用户管理页面CSS选择器不匹配问题
- ✅ **导航高度不一致**:统一导航高度
- ✅ **链接高度不一致**:统一导航链接修复80×30与80×44px的高度差异
- ✅ **移动端溢出问题**:修复搜索框、按钮和目录创建表单在移动端的溢出问题
- ✅ **按钮文本重叠**:增加按钮最小宽度,解决文本重叠问题
### 历史版本概述

- **v0.0.5**:实现智能日志级别分类系统、搜索栏支持、热力图统计功能、API统计接口、带宽监控、目录递归功能、分享功能、多级管理员系统和用户权限细化
- **v0.0.4**:实现每日上传限制功能、优化错误处理机制、改进界面布局
- **v0.0.3**:添加管理员批量操作功能、增强文件上传体验、优化界面设计
- **v0.0.2**:优化日志系统、增强服务器信息页面、改进项目结构
- **v0.0.1**:实现基础功能、用户角色系统、文件审核机制

## ???? 功能特性

### ???? 权限管理系统
- **多角色权限控制**:支持管理员、二级管理员、普通用户和访客四种角色
- **细粒度权限分配**:针对不同角色分配不同的操作权限(查看文件、上传、下载、删除、创建目录、审核文件、用户管理、查看日志、查看统计信息)
- **会话管理**:基于Cookie的安全认证机制,支持会话过期自动清理(24小时有效期)

#### 用户角色权限对照表

| 权限/功能     | 管理员 | 二级管理员 | 普通用户 | 访客 |
|---------------|--------|------------|----------|------|
| 查看文件列表   | ✅     | ✅         | ✅       | ✅   |
| 文件下载       | ✅     | ✅         | ✅       | ✅   |
| 文件分享       | ✅     | ✅         | ✅       | ✅   |
| 文件上传       | ✅     | ✅         | ✅       | ❌   |
| 创建目录       | ✅     | ✅         | ✅       | ❌   |
| 删除文件       | ✅     | ❌         | ❌       | ❌   |
| 审核文件       | ✅     | ✅         | ❌       | ❌   |
| 用户管理       | ✅     | ❌         | ❌       | ❌   |
| 查看日志       | ✅     | ✅         | ❌       | ❌   |
| 查看统计信息   | ✅     | ❌         | ❌       | ❌   |
| 无限制上传     | ✅     | ❌         | ❌       | ❌   |

### ???? 文件管理功能
- **文件上传**:支持拖拽上传、批量上传和目录选择,带有文件大小验证和每日上传限制
  - 普通用户: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五种日志级别
- **详细日志内容**:记录用户操作、系统事件和错误信息
- **日志筛选功能**:支持按日期和日志级别筛选日志
- **日志持久化**:日志信息持久化存储,便于后续查询和分析
- **结构化日志格式**:包含时间戳、级别、用户名、角色、操作和详情
- **日志倒序显示**:最新日志显示在前面,方便查看
- **智能滚动**:页面加载时自动滚动到顶部,确保看到最新日志

### ???? 服务器信息展示
- **系统运行时间**:显示服务器已运行的时间
- **当前时间**:显示服务器当前时间
- **待审核文件数量**:实时显示待审核文件数量,方便管理员及时处理
- **系统信息显示**:显示操作系统、架构、Go版本、CPU核心数等
- **服务器配置显示**:显示端口、下载目录、待审核目录等
- **项目信息显示**:显示项目名称、版本、开发者、启动时间等
- **内存使用信息**:显示当前协程数
- **用户角色权限表**:清晰展示不同角色的权限对比
- **使用说明**:添加了系统使用说明

## ???? API统计接口

系统提供RESTful API接口供第三方系统集成:
- 获取所有文件的统计信息(JSON格式)
- 数据包含下载次数、分享次数、带宽使用等详细信息
- JSON格式返回,便于程序解析和处理
- 无需身份验证即可访问,方便集成到其他系统

### ???? 数据处理机制
- **自动去重**:自动合并重复统计条目,确保数据准确性
- **数据清理**:定期清理任务,保持统计数据的一致性
- **路径识别**:支持子目录文件路径的正确识别和统计
- **持久化存储**:数据持久化存储到本地文件,重启服务后数据不丢失

## ???? Docker部署方案

### 1. 常规Docker部署
```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"

2. 飞牛专用部署

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"

3. 1panel部署

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"

???? 快速开始

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的并发特性,支持高并发请求处理

配置管理

  • 自动配置: 首次运行自动生成config.json配置文件

  • 命令行参数: 支持通过命令行参数覆盖配置(端口、证书文件等)

  • 环境变量支持: 支持通过环境变量配置服务器参数

  • 默认配置: 内置默认配置,确保服务能快速启动

服务器特性

  • 容器化部署: 使用Docker容器化技术,简化部署和管理

  • 跨平台支持: 支持Windows、Linux和Mac系统

  • 双协议支持: 同时支持HTTP和HTTPS访问

  • 持久化存储: 支持数据持久化到主机文件系统

  • 并发处理: 利用Go的goroutine特性,支持高并发文件传输

  • 自动目录创建: 自动创建必要的目录结构(downloads、pending、logs等)

启动流程

  1. 解析命令行参数和环境变量

  2. 加载配置文件(如不存在则使用默认配置)

  3. 初始化必要的目录结构

  4. 注册HTTP处理函数

  5. 启动HTTP服务器

  6. 启动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)

???? 开发说明

此项目使用纯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编码处理所有文件路径和名称。

???? 贡献指南

欢迎参与项目开发!如果您想为该项目贡献代码或报告问题

???? 许可证

MIT License

没有了

相关阅读