GHS Pro是一个功能完整的 Go 语言静态文件服务器,使用 React+TypeScript 前端,支持文件上传下载、目录压缩、搜索、断点续传、访问控制和 HTTPS/WebDAV 支持。

功能特性

  • 文件上传/下载: 支持多文件上传和拖拽上传
  • 目录压缩: 将目录打包为 ZIP 文件下载
  • 文件搜索: 基于文件名的模糊搜索,实时搜索
  • 断点续传: 支持 HTTP Range 请求,实现断点续传和并发下载
  • 路径访问控制: 支持路径级别的允许/拒绝规则(支持通配符)
  • HTTPS 支持: 支持 TLS/SSL 加密传输
  • WebDAV 支持: 完整的 WebDAV 协议实现
  • curl 友好: RESTful API 设计,方便命令行工具调用
  • 现代化前端: React + TypeScript,响应式设计,拖拽上传
  • 文件管理: 前端可查看、上传、下载、搜索和删除文件
  • 文件分享: 一键生成分享链接并复制到剪贴板,支持文件和文件夹分享

安装

一键安装[强烈推荐]

docker rm -f gohttpserver

docker run -itd --restart=always  -v /opt/gohttpserver:/data -p 8080:8080  -e AUTH=admin:password123  -e BASE_URL=http://[Your IP]:8080  --name  gohttpserver harbor.michaelapp.com/gohttpserver/gohttpserver:v1.26 --upload --delete

使用方法

基本用法

# 启动服务器(默认端口 8080,当前目录)
./gohttpserver

# 指定根目录和端口
./gohttpserver --root /path/to/files --port 9000

# 启用前端(需要先构建前端)
./gohttpserver --root ./data --port 8080 --web-dir ./frontend/dist

# 启用 HTTPS
./gohttpserver --https --cert cert.pem --key key.pem

# 启用 HTTP Basic 认证
./gohttpserver --auth "username:password"

# 启用文件上传功能(默认关闭)
./gohttpserver --upload

# 启用文件删除功能(默认关闭)
./gohttpserver --delete

# 同时启用上传和删除功能
./gohttpserver --upload --delete

# 启用 WebDAV(默认启用)
./gohttpserver --webdav

# 配置分享链接的基础地址(用于内网或域名访问)
./gohttpserver --base-url http://10.0.203.100:8080

# 使用环境变量配置基础地址
BASE_URL=http://10.0.203.100:8080 ./gohttpserver

命令行参数

参数 说明 默认值
--root 服务根目录 . (当前目录)
--port HTTP 端口 8080
--https-port HTTPS 端口
--https 启用 HTTPS false
--cert TLS 证书文件路径
--key TLS 私钥文件路径
--auth HTTP Basic 认证
--allow-paths 允许访问的路径列表
--deny-paths 拒绝访问的路径列表
--webdav 启用 WebDAV 支持 true
--upload 启用文件上传功能 false
--delete 启用文件删除功能 false
--web-dir 前端文件目录
--base-url 分享链接的基础地址,可通过 BASE_URL 环境变量设置。

访问控制示例

# 只允许访问 /public 和 /shared 目录
./gohttpserver --allow-paths "/public,/shared"

# 拒绝访问 /private 目录
./gohttpserver --deny-paths "/private"

# 组合使用:允许 /public,拒绝 /public/secret
./gohttpserver --allow-paths "/public" --deny-paths "/public/secret"

注意: 访问控制优先级:deny > allow > 默认策略(允许)

API 接口

文件列表

# 获取文件列表
curl http://localhost:8080/api/list?path=/

# 带认证
curl -u username:password http://localhost:8080/api/list?path=/subdir

文件下载

# 下载文件
curl -O http://localhost:8080/api/download/path/to/file.txt

# 断点续传(支持 Range 请求)
curl -C - -O http://localhost:8080/api/download/large-file.zip

目录压缩下载

# 下载目录为 ZIP
curl -O http://localhost:8080/api/zip/path/to/directory

文件上传

注意: 需要启动时使用 --upload 标志启用上传功能。

# 单文件上传
curl -X POST -F "file=@/path/to/file.txt" -F "path=/" http://localhost:8080/api/upload

# 多文件上传
curl -X POST -F "files=@file1.txt" -F "files=@file2.txt" -F "path=/uploads" http://localhost:8080/api/upload

文件搜索

# 搜索文件
curl "http://localhost:8080/api/search?q=keyword"

# 限制搜索结果数量
curl "http://localhost:8080/api/search?q=keyword&max=50"

删除文件/目录

注意: 需要启动时使用 --delete 标志启用删除功能。

# 删除文件
curl -X DELETE http://localhost:8080/api/delete/path/to/file.txt

Web 界面

访问 http://localhost:8080/ 即可使用 Web 界面:

  • 📁 浏览文件和目录(表格视图)
  • 🔍 实时搜索文件
  • 📤 拖拽上传文件
  • ⬇️ 下载文件和目录(ZIP)
  • 🔗 分享文件和文件夹(一键复制分享链接)
  • 🗑️ 删除文件/目录
  • 🧭 面包屑导航

分享功能

Web 界面支持文件和文件夹的分享功能:

  • 文件分享: 点击文件列表中的”分享”按钮,系统会自动生成文件的直接下载链接并复制到剪贴板
  • 文件夹分享: 点击文件夹的”分享”按钮,系统会生成带路径参数的页面链接,打开后自动跳转到对应目录
  • 视觉反馈: 复制成功后,分享按钮图标会短暂变为 ✓,提示用户已成功复制
  • 使用场景: 可以将分享链接发送给他人,方便协作和文件分发