Skip to content

About

专注解决内网环境文件上传和取出困难的痛点,服务基于Gin框架的文件上传服务,支持断点续传、彩色码取文件和文件管理功能。

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Repository files navigation

SimpleHttpServer - 轻量高效文件上传服务

基于 Gin 框架开发的高性能文件上传服务,专注于大文件传输、断点续传和私有化文件管理场景,无需复杂配置即可快速部署,适配各类 Linux 环境。

🌟 核心亮点

  • 大文件分片上传:自动将大文件拆分多块传输,降低网络波动影响。
  • 断点续传机制:上传中断(网络断开、客户端退出)后,重新上传可自动跳过已完成分片,无需从头开始。
  • 多类型文件预览:支持文本/代码高亮、图片、PDF、Markdown、CSV、音视频等多种格式在线预览。
  • 私有化文件管理:支持文件查看、下载、删除全生命周期管理。
  • 二维码便捷分享:2KB 以内的纯文本文件可生成二维码,手机微信扫一下即可直接提取全文,解决部分私有化环境下文本提取限制痛点。
  • 彩色码大文件分享:二进制文件(任意大小)及超过 2KB 的文本可生成彩色码动画,手机 CFC 应用扫码接收,突破二维码体积限制。
  • 零依赖快速部署:Go 语言编译生成单文件,无额外依赖,支持 systemd 后台运行与开机自启。
  • 安全访问控制:管理员账号密码登录管理,支持 HTTPS 加密传输(自有证书或自动生成自签名证书),文件下载链接加入白名单,无需登录即可直接下载。
  • 响应式 UI 设计:移动端浏览器适配有限,推荐使用pc端chrome浏览器,上传进度实时可视化展示。

🛠️ 技术栈

类型 技术选型
后端框架 Gin(高性能 Go 语言 Web 框架)
前端技术 HTML5 + CSS3 + JavaScript
图标库 Font Awesome(直观功能图标)
HTTP 客户端 axios(异步请求与进度监控)
部署支持 systemd(服务进程管理)

🚀 快速开始(推荐)

单文件二进制部署,已嵌入静态资源,无需额外文件,支持 Linux amd64/arm64 架构。

前提条件

  • 支持 systemd 的 Linux 系统(不支持 systemd 的系统手动启动亦可)。
  • 网络端口通畅,确保端口(默认 18181)未被占用。

部署步骤

  1. 获取二进制文件(二选一)

    # x86_64 linux 版本示例
    wget https://gitee.com/zhao-pengfei2/simple-http-server-new/releases/download/v3.0.0/install.sh
    wget -O SimpleHttpServer https://gitee.com/zhao-pengfei2/simple-http-server-new/releases/download/v3.0.0/SimpleHttpServer-linux-amd64
  2. 一键安装并启动

    # 将 install.sh 与二进制文件放在同一目录后执行(需 root 权限)
    sudo bash install.sh

    脚本会自动完成:查找二进制 → 复制到 /usr/local/bin/ → 创建日志/上传目录 → 配置 systemd → 启动服务。

  3. (可选)修改默认配置

    编辑脚本顶部的配置变量后重新执行即可,脚本支持重复执行(幂等部署),已有上传文件不会丢失。

    常用配置项:

    变量 默认值 说明
    PORT 18181 服务端口
    PASSWORD admin@123 管理员登录密码
    UPLOAD_DIR /var/lib/SimpleHttpServer/uploads 上传目录。建议指向数据盘(如 /data/uploads),默认 /var/lib 通常位于系统盘,空间有限
    MAX_SIZE 200 单次上传最大文件大小(GB)
    CHUNK_SIZE 5 大文件分片大小(MB)
    LOG_DIR /var/log/SimpleHttpServer 日志目录(日志量小,默认系统盘即可)

    示例:将上传目录改到数据盘 /data:

    # 编辑 install.sh,将
    UPLOAD_DIR="/var/lib/SimpleHttpServer/uploads"
    # 改为
    UPLOAD_DIR="/data/uploads"
    # 保存后重新执行
    sudo bash install.sh

安装后验证

# 查看服务状态
systemctl status SimpleHttpServer
# 预期输出:active (running) 表示启动成功

访问服务

打开浏览器,输入 http://服务器IP:18181,使用默认账号密码登录:

  • 用户名:admin
  • 密码:admin@123

🐳 Docker 部署(可选)

镜像不区分操作系统,仅区分 CPU 架构(amd64/arm64)。

下载镜像包并运行(推荐)

从 release 下载对应架构的镜像包(内网/离线环境同样适用),docker load 后直接运行:

# 按机器架构二选一(x86_64 选 amd64,ARM 选 arm64)
wget https://gitee.com/zhao-pengfei2/simple-http-server-new/releases/download/v3.0.0/simple-http-server-v3.0.0-arm64.tar.gz
docker load < simple-http-server-v3.0.0-arm64.tar.gz

docker run -d --name shs \
  -p 18181:18181 \
  -v /data/simple-http-server:/data \
  -e PASSWORD=MyPass123 \
  simple-http-server:v3.0.0-arm64
  • 上传目录挂载:宿主机目录(示例 /data/simple-http-server)挂载到容器 /data,上传文件持久化在宿主机、不随容器销毁;容器首次启动自动修正挂载目录属主(容器内以非 root 用户 UID 1000 运行)。
  • 日志:全部输出到 stdout,docker logs -f shs 查看;滚动文件位于容器 /tmp(重启即弃)。
  • 健康检查:内置 HEALTHCHECK,每 30s 探测登录页,状态可在 docker ps 查看。

entrypoint 支持参数透传,可追加任意启动参数覆盖默认配置,如 docker run ... simple-http-server:v3.0.0-arm64 --tls。 从源码自行构建镜像包的方式见下文「源码编译」第 5 步。

⚙️ 源码编译(开发者选项)

如需自定义功能,可通过源码编译部署,需提前安装 Go 1.16+ 环境。

编译步骤

  1. 克隆源码仓库

    git clone https://gitee.com/zhao-pengfei2/simple-http-server-new.git
    cd simple-http-server-new
  2. 编译生成可执行文件

    # 使用 Makefile 交叉编译
    make all            # 全平台编译(Linux/macOS × amd64/arm64)
    make linux-amd64    # 仅 Linux amd64
    make linux-arm64    # 仅 Linux arm64
    make darwin-amd64   # 仅 macOS amd64
    make darwin-arm64   # 仅 macOS ARM
    
    # 编译产物在 build/ 目录下
    ls build/

    Makefile 已内置 -ldflags "-w -s" 优化,二进制体积约 20MB,静态资源已嵌入,无需额外依赖。

  3. 手动启动服务

    # 直接启动(使用默认配置)
    ./SimpleHttpServer
    # 或指定参数启动
    ./SimpleHttpServer -P 8080 -d /data/uploads
    # 仍然使用install.sh配置systemd管理服务
    sudo bash install.sh
  4. (可选)构建 Docker 镜像包(需本机安装 Docker)

    make docker-save          # 生成 amd64 + arm64 两个镜像 tar.gz(输出到 build/ 目录)
    make docker-save-amd64    # 仅 amd64
    make docker-save-arm64    # 仅 arm64
    # 编译产物在 build/ 目录下

📋 功能使用指南

1. 文件上传

  • 登录后点击首页「选择文件」,支持单次上传多个文件(默认最大 20GB,可通过参数调整)。 img1.png
  • 上传过程中实时显示进度条,支持暂停/继续上传,网络中断后重新上传会自动续传。 img2.png img3.png
  • 支持上传到子目录

2. 文件管理

本服务提供完善的文件全生命周期管理能力,支持多目录层级浏览、分页查看、精准搜索、在线预览、便捷下载及安全删除,操作简洁高效。

  • 查看文件:首页展示所有目标目录中文件及子目录中文件,包括文件名、大小、上传时间,支持面包屑导航,当文件记录数大于 10 条时,自动启用分页展示。 img5.png
  • 预览文件:支持多种格式在线预览:文本/代码(语法高亮)、图片、PDF、Markdown(富文本渲染)、CSV(表格)、音视频(原生播放)。不同类型文件有独立的大小限制(文本 5MB、图片 20MB、PDF 100MB、音视频 50MB-1GB)。 img4.png
  • 下载文件:点击「下载」按钮获取文件,或复制下载链接分享给他人(无需登录即可下载)。
  • 删除文件:管理员可点击「删除」按钮移除不需要的文件,操作不可逆,请谨慎操作。
  • 文件搜索:在文件列表顶部配备搜索框,支持对当前目录下按文件名进行「模糊匹配搜索」。

3. 二维码分享

  • 对于 2KB(--qr-size 参数可调整,不建议增大,识别困难)以内的纯文本文件,上传完成后会显示「生成二维码」按钮。
  • 点击按钮生成文件二维码,单张即可容纳,手机微信扫一扫直接提取全文,适用于无网络拷贝权限的私有化场景。
  • 二进制文件不再提供二维码(改走彩色码),避免多码拼接 base64 再解码的繁琐流程。 img6.png

4. 彩色码分享(大文件)

  • 对于二进制文件(任意大小)及超过 2KB 的文本(上限 33MB,可通过 --cimbar-size 参数调整),文件列表显示紫色「彩色码」按钮。
  • 点击后在浏览器本地将文件编码为彩色动画条码,手机安装 CFC(CameraFileCopy)应用对准屏幕即可自动接收,适用于无网络拷贝权限的私有化场景。
  • 不转换服务器文件时,也可点击首页右上角「彩色码(本机文件)」按钮,直接从本机选择文件编码(文件不会上传到服务器);编码器界面已汉化(菜单/模式/帧率均含中文说明)。
  • 接收端(二选一):
    • 免安装(推荐 iPhone/安卓通用):手机浏览器打开官方网页解码器 re.cimbar.org(需允许摄像头权限;编码页面顶部有该网址二维码,可直接扫码打开;建议发送端使用默认 B 模式)。
    • 安卓 App:CFC(速度更快,要求 Android 5.0+ 且 arm64-v8a):GitHub 直链下载 v0.6.7(或 GitHub Releases / F-Droid / Google Play 搜索 CFC);国内用户可直接走 Gitee 镜像下载 v0.6.7。
  • 编码器模式与帧率(编码页面右上角菜单):
    • 模式(速度从快到慢,接收不稳时依次降级):B(默认,黑白高密度,约 9.3KB/帧,对摄像头要求最高)→ Bm(宽幅黑白,约 70% 速度,兼容性更好)→ Bu(小网格,约 43% 速度,兼容性最好);4C 为旧版四色格式,速度接近 B 但对屏幕色彩准确性敏感。
    • 帧率:5/10/15/20 fps(默认 15)。越高传输越快、对拍摄稳定性要求越高(20fps 需明亮环境);接收不稳定时降低帧率有助于解码。
  • 注意事项:
    • 接收端画面中的定位框颜色即当前识别状态(官方源码定义):绿色=已锁定、正在解码,进度条此时才会走动;黄色=检测到画面但解码未成功(请调整手机对焦/距离/角度,或将模式/帧率调低一档);白色/无框=未检测到彩色码(请把屏幕完整对准取景框)。保持绿色对准屏幕直至进度走完即可。
    • 33MB 为压缩后上限,zip/rar 等已压缩文件接近上限时可能编码失败;
    • 编码期间请勿切换标签页或最小化窗口(动画需持续播放供手机扫描);
    • 编码在浏览器本地完成(基于 libcimbar,MPL-2.0 许可):服务器文件经下载通道读取到浏览器后编码,编码结果不会回传服务器;本机选择的文件不上传服务器。

5. 配置参数自定义

支持通过命令行参数调整服务配置,执行 ./SimpleHttpServer --help 查看所有参数:

参数缩写 参数名 默认值 说明
-o --qr-size 2048 B(2KB) 可生成二维码的最大文本文件大小(二进制走彩色码),不建议增大(识别困难)
--cimbar-size 34603008 B(33MB) 可生成彩色码的最大文件大小,33MB 为压缩后硬上限
-c --chunk 5 MB 大文件分片大小,根据网络情况调整(如网络差可适当缩小)
-d --dir uploads 文件上传存储目录(相对当前启动目录,可设置其他绝对路径)
-l --log-file ./log/http.server.log 日志文件路径
--log-level info 日志级别:debug/info/warn/error
-M --max-size 20 GB 单次上传最大文件大小限制
-p --password admin@123 管理员登录密码
-P --port 18181 服务监听端口(需确保端口未被占用)
-u --username admin 管理员登录用户名
--tls-cert "" TLS 证书路径(PEM 格式),同时传入 --tls-cert 和 --tls-key 启用 HTTPS
--tls-key "" TLS 私钥路径(PEM 格式),同时传入 --tls-cert 和 --tls-key 启用 HTTPS
-t --tls false 自动生成自签名证书并启用 HTTPS(无需证书文件,适合测试)

示例:

  • 修改登录密码为 MyPass123,最大上传文件为 50GB:
    ./SimpleHttpServer -p MyPass123 -M 50
  • 使用自有证书启用 HTTPS:
    ./SimpleHttpServer --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem
  • 自动生成自签名证书(测试用):
    ./SimpleHttpServer --tls

🛡️ 安全与注意事项

  1. 建议修改管理员密码,避免未授权访问。
  2. 服务支持 HTTP 和 HTTPS 协议,可通过 --tls-cert/--tls-key 指定证书启用 HTTPS,或使用 --tls 自动生成自签名证书(测试用)。
  3. 定期清理上传目录,避免磁盘空间占用过多,尤其是临时分片文件(系统会自动清理已合并的分片)。
  4. 请勿上传涉密、违法违规文件,确保文件传输与存储符合相关法律法规。
  5. 防火墙需开放配置的服务端口(默认 18181),否则外部无法访问。
  6. 彩色码功能基于 libcimbar(MPL-2.0 许可)实现,cimbar_js.html 与许可全文随二进制分发(见 third_party/libcimbar-LICENSE.txt)。

❓ 常见问题

Q1:安装后启动失败,提示「端口被占用」?

A:使用 -P 参数指定未被占用的端口,例如 ./SimpleHttpServer -P 8081,或关闭占用该端口的进程。 B:使用脚本部署方式,直接修改脚本中参数重新执行脚本即可。

Q2:上传文件取消或中断后重新上传相同文件无响应问题

A:刷新浏览器页面重试即可

Q3:忘记管理员密码怎么办?

A:通过命令行启动时指定新密码,例如 ./SimpleHttpServer -p 新密码,启动后使用新密码登录。 B:使用脚本部署方式,直接修改脚本中参数重新执行脚本即可。

Q4:上传的文件存储在哪里?

A:手动启动时默认在启动目录下的 uploads 文件夹,可通过 -d 参数指定(如 -d /data/uploads)。 B:使用脚本部署时,修改脚本中 UPLOAD_DIR 变量后重新执行脚本即可,已有文件不会丢失。建议将上传目录指向空间充足的数据盘(如 /data),默认 /var/lib/SimpleHttpServer/uploads 位于系统盘,空间有限。

📌 版本信息

  • 当前版本:v3.0.0
  • 更新日志:
    • v3.0.0:(新增彩色码分享基于 libcimbar,≤33MB 文件扫码接收);二维码策略调整(仅 2KB 以内纯文本走二维码,二进制改走彩色码,修复 --qr-size 参数不可用问题);编码器界面汉化;安装脚本支持码分享参数、非 bash 环境自动切换。
    • v2:静态资源嵌入二进制,单文件部署;优化安装脚本,支持自动下载 + 幂等部署;新增多类型文件预览(文本/图片/PDF/Markdown/CSV/音视频)、日志配置参数、跨平台编译 Makefile。
    • v1:大文件上传、断点续传、文件管理、二维码分享核心功能。

🎯 适用场景

  • 私有化部署的文件传输需求(如内网服务器间文件共享)。
  • 开发/测试环境的临时文件上传与分发。
  • 嵌入式设备(ARM 架构)的轻量文件管理服务。
  • 无云存储权限场景下的小文件快速分享。

About

专注解决内网环境文件上传和取出困难的痛点,服务基于Gin框架的文件上传服务,支持断点续传、彩色码取文件和文件管理功能。

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages