基于 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)未被占用。
-
获取二进制文件(二选一)
- 从 gitee releases 或者github releases下载预编译二进制文件,以及
install.sh脚本
# 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 - 从 gitee releases 或者github releases下载预编译二进制文件,以及
-
一键安装并启动
# 将 install.sh 与二进制文件放在同一目录后执行(需 root 权限) sudo bash install.sh脚本会自动完成:查找二进制 → 复制到
/usr/local/bin/→ 创建日志/上传目录 → 配置 systemd → 启动服务。 -
(可选)修改默认配置
编辑脚本顶部的配置变量后重新执行即可,脚本支持重复执行(幂等部署),已有上传文件不会丢失。
常用配置项:
变量 默认值 说明 PORT18181 服务端口 PASSWORDadmin@123 管理员登录密码 UPLOAD_DIR/var/lib/SimpleHttpServer/uploads上传目录。建议指向数据盘(如 /data/uploads),默认/var/lib通常位于系统盘,空间有限MAX_SIZE200 单次上传最大文件大小(GB) CHUNK_SIZE5 大文件分片大小(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
镜像不区分操作系统,仅区分 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+ 环境。
-
克隆源码仓库
git clone https://gitee.com/zhao-pengfei2/simple-http-server-new.git cd simple-http-server-new -
编译生成可执行文件
# 使用 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,静态资源已嵌入,无需额外依赖。 -
手动启动服务
# 直接启动(使用默认配置) ./SimpleHttpServer # 或指定参数启动 ./SimpleHttpServer -P 8080 -d /data/uploads # 仍然使用install.sh配置systemd管理服务 sudo bash install.sh
-
(可选)构建 Docker 镜像包(需本机安装 Docker)
make docker-save # 生成 amd64 + arm64 两个镜像 tar.gz(输出到 build/ 目录) make docker-save-amd64 # 仅 amd64 make docker-save-arm64 # 仅 arm64 # 编译产物在 build/ 目录下
本服务提供完善的文件全生命周期管理能力,支持多目录层级浏览、分页查看、精准搜索、在线预览、便捷下载及安全删除,操作简洁高效。
- 查看文件:首页展示所有目标目录中文件及子目录中文件,包括文件名、大小、上传时间,支持面包屑导航,当文件记录数大于 10 条时,自动启用分页展示。

- 预览文件:支持多种格式在线预览:文本/代码(语法高亮)、图片、PDF、Markdown(富文本渲染)、CSV(表格)、音视频(原生播放)。不同类型文件有独立的大小限制(文本 5MB、图片 20MB、PDF 100MB、音视频 50MB-1GB)。

- 下载文件:点击「下载」按钮获取文件,或复制下载链接分享给他人(无需登录即可下载)。
- 删除文件:管理员可点击「删除」按钮移除不需要的文件,操作不可逆,请谨慎操作。
- 文件搜索:在文件列表顶部配备搜索框,支持对当前目录下按文件名进行「模糊匹配搜索」。
- 对于 2KB(
--qr-size参数可调整,不建议增大,识别困难)以内的纯文本文件,上传完成后会显示「生成二维码」按钮。 - 点击按钮生成文件二维码,单张即可容纳,手机微信扫一扫直接提取全文,适用于无网络拷贝权限的私有化场景。
- 二进制文件不再提供二维码(改走彩色码),避免多码拼接 base64 再解码的繁琐流程。

- 对于二进制文件(任意大小)及超过 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 许可):服务器文件经下载通道读取到浏览器后编码,编码结果不会回传服务器;本机选择的文件不上传服务器。
支持通过命令行参数调整服务配置,执行 ./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
- 建议修改管理员密码,避免未授权访问。
- 服务支持 HTTP 和 HTTPS 协议,可通过
--tls-cert/--tls-key指定证书启用 HTTPS,或使用--tls自动生成自签名证书(测试用)。 - 定期清理上传目录,避免磁盘空间占用过多,尤其是临时分片文件(系统会自动清理已合并的分片)。
- 请勿上传涉密、违法违规文件,确保文件传输与存储符合相关法律法规。
- 防火墙需开放配置的服务端口(默认 18181),否则外部无法访问。
- 彩色码功能基于 libcimbar(MPL-2.0 许可)实现,
cimbar_js.html与许可全文随二进制分发(见third_party/libcimbar-LICENSE.txt)。
A:使用 -P 参数指定未被占用的端口,例如 ./SimpleHttpServer -P 8081,或关闭占用该端口的进程。
B:使用脚本部署方式,直接修改脚本中参数重新执行脚本即可。
A:刷新浏览器页面重试即可
A:通过命令行启动时指定新密码,例如 ./SimpleHttpServer -p 新密码,启动后使用新密码登录。
B:使用脚本部署方式,直接修改脚本中参数重新执行脚本即可。
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:大文件上传、断点续传、文件管理、二维码分享核心功能。
- v3.0.0:(新增彩色码分享基于 libcimbar,≤33MB 文件扫码接收);二维码策略调整(仅 2KB 以内纯文本走二维码,二进制改走彩色码,修复
- 私有化部署的文件传输需求(如内网服务器间文件共享)。
- 开发/测试环境的临时文件上传与分发。
- 嵌入式设备(ARM 架构)的轻量文件管理服务。
- 无云存储权限场景下的小文件快速分享。


