gohttpserver

gohttpserver

功能丰富的开源HTTP文件服务器 支持上传和二维码生成

gohttpserver是一个开源的HTTP文件服务器项目,具有人性化UI界面和多种实用功能。它支持文件上传、安卓和iOS安装包二维码生成、面包屑导航、README预览和HTTP基本认证等特性。该项目致力于提供高效便捷的文件管理和分享解决方案,适用于需要快速部署文件服务的场景。

gohttpserverHTTP文件服务器文件上传二维码生成DockerGithub开源项目

gohttpserver

构建状态 Docker 自动构建

  • 目标:打造最好的HTTP文件服务器。
  • 特点:用户友好的界面,支持文件上传,直接生成苹果和安卓安装包的二维码。

演示站点

  • 目标:打造最好的HTTP文件服务器
  • 功能:用户友好的界面体验,支持文件上传,直接生成安卓和苹果安装包的二维码。

可以从此仓库的发布页面下载二进制文件

要求

已在go-1.16版本测试通过

截图

屏幕截图

特性

  1. 支持生成二维码
  2. 面包屑导航快速切换路径
  3. 所有资源打包成独立的二进制文件
  4. 不同文件类型显示不同图标
  5. 支持显示或隐藏隐藏文件
  6. 支持上传(通过令牌或会话认证)
  7. README.md 预览
  8. HTTP基本认证
  9. 目录变化时部分重载页面
  10. 当目录下只有一个子目录时,路径会自动合并
  11. 目录zip下载
  12. 自动为苹果ipa生成.plist文件,二维码可被iPhone识别(需要https)
  13. Plist代理
  14. 下载计数统计
  15. 启用CORS
  16. 离线下载
  17. 代码文件预览
  18. 支持文件编辑
  19. 全局文件搜索
  20. 在小屏幕上隐藏"下载"和"二维码"功能
  21. 支持主题选择
  22. 可以在Nginx后面正常工作
  23. 支持.ghs.yml(类似.htaccess)
  24. 计算md5sum和sha
  25. 文件夹上传
  26. 支持按大小或修改时间排序
  27. 在索引页面添加版本信息
  28. 添加API /-/info/some.(apk|ipa) 获取详细信息
  29. 添加API /-/apk/info/some.apk 获取安卓包信息
  30. 自动标记版本
  31. 支持自定义标题
  32. 支持从配置文件设置
  33. 快速复制下载链接
  34. 显示文件夹大小
  35. 创建文件夹
  36. 按住alt键跳过删除确认
  37. 支持上传时解压zip文件(使用表单:unzip=true)

安装

$ go install github.com/codeskyblue/gohttpserver@latest

或从github releases下载二进制文件

如果你使用Mac,只需运行以下命令

$ brew install codeskyblue/tap/gohttpserver

使用方法

在所有接口的8000端口上监听,并启用文件上传功能。

$ gohttpserver -r ./ --port 8000 --upload

使用 gohttpserver --help 命令查看更多用法。

Docker使用方法

共享当前目录

$ docker run -it --rm -p 8000:8000 -v $PWD:/app/public --name gohttpserver codeskyblue/gohttpserver

使用HTTP基本认证共享当前目录

$ docker run -it --rm -p 8000:8000 -v $PWD:/app/public --name gohttpserver \ codeskyblue/gohttpserver \ --auth-type http --auth-http username:password

使用openid认证共享当前目录。(仅在网易公司内部有效。)

$ docker run -it --rm -p 8000:8000 -v $PWD:/app/public --name gohttpserver \ codeskyblue/gohttpserver \ --auth-type openid

如果要自己构建镜像,请将当前目录切换到本仓库的根目录。

$ cd gohttpserver/ $ docker build -t codeskyblue/gohttpserver -f docker/Dockerfile .

认证选项

  • 启用基本HTTP认证

    $ gohttpserver --auth-type http --auth-http username:password
  • 使用openid认证

    $ gohttpserver --auth-type openid --auth-openid https://login.example-hostname.com/openid/
  • 使用oauth2-proxy

    $ gohttpserver --auth-type oauth2-proxy

    你可以配置让HTTP反向代理处理认证。 使用oauth2-proxy时,后端将使用请求头X-Auth-Request-Email作为用户ID,X-Auth-Request-Fullname作为用户显示名称。 请自行配置你的oauth2反向代理。 更多关于oauth2-proxy的信息。

    所有必需的头部列表如下。

    头部
    X-Auth-Request-Email用户ID
    X-Auth-Request-Fullname用户显示名称(URL编码)
    X-Auth-Request-User用户昵称(通常是邮箱前缀)
  • 启用上传

    $ gohttpserver --upload
  • 启用删除和创建文件夹

    $ gohttpserver --delete

高级用法

通过在子目录下创建.ghs.yml文件来添加访问规则。示例:

--- upload: false delete: false users: - email: "codeskyblue@codeskyblue.com" delete: true upload: true token: 4567gf8asydhf293r23r

在这种情况下,如果启用了openid认证,并且用户"codeskyblue@codeskyblue.com"已登录,他/她可以在.ghs.yml文件所在的目录下删除/上传文件。

token用于上传。参见使用curl上传

例如,在以下目录层次结构中,用户可以在foo目录中删除/上传文件,但在bar目录中不能这样做。

root -
  |-- foo
  |    |-- .ghs.yml
  |    `-- world.txt 
  `-- bar
       `-- hello.txt

用户可以使用--conf指定配置文件名,参见示例config.yml

要指定哪些文件隐藏,哪些文件可见,请在.ghs.yml中添加以下行

accessTables: - regex: block.file allow: false - regex: visual.file allow: true

ipa plist代理

这用于启用了https的服务器。默认使用https://plistproxy.herokuapp.com/plist

$ gohttpserver --plistproxy=https://someproxyhost.com/

测试代理是否工作:

$ http POST https://someproxyhost.com/plist < app.plist { "key": "18f99211" } $ http GET https://someproxyhost.com/plist/18f99211 # 显示app.plist内容

如果你的ghs运行在nginx服务器后面并且已配置https,plistproxy将自动禁用。

使用CURL上传

例如,将名为foo.txt的文件上传到somedir目录

$ curl -F file=@foo.txt localhost:8000/somedir {"destination":"somedir/foo.txt","success":true} # 使用令牌上传 $ curl -F file=@foo.txt -F token=12312jlkjafs localhost:8000/somedir {"destination":"somedir/foo.txt","success":true} # 上传并更改文件名 $ curl -F file=@foo.txt -F filename=hi.txt localhost:8000/somedir {"destination":"somedir/hi.txt","success":true}

上传zip文件并解压(解压完成后zip文件将被删除)

$ curl -F file=@pkg.zip -F unzip=true localhost:8000/somedir
{"success": true}

注意:文件名中不允许使用 \/:*<>| 这些字符。

使用nginx部署

推荐配置,假设你的gohttpserver监听在 127.0.0.1:8200

server {
  listen 80;
  server_name your-domain-name.com;

  location / {
    proxy_pass http://127.0.0.1:8200; # 这里需要修改
    proxy_redirect off;
    proxy_set_header  Host    $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;

    client_max_body_size 0; # 禁用上传限制
  }
}

当gohttpserver位于nginx后面时,应该以--xheaders参数启动。

参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

gohttpserver还支持--prefix标志,当/被其他服务占用时这会很有帮助。相关问题 https://github.com/codeskyblue/gohttpserver/issues/105

使用示例:

# 对于gohttpserver $ gohttpserver --prefix /foo --addr :8200 --xheaders

Nginx设置

server {
  listen 80;
  server_name your-domain-name.com;

  location /foo {
    proxy_pass http://127.0.0.1:8200; # 这里需要修改
    proxy_redirect off;
    proxy_set_header  Host    $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;

    client_max_body_size 0; # 禁用上传限制
  }
}

常见问题

查询是如何格式化的

搜索查询遵循类似Google的常见格式规则。关键词用空格分隔,带有前缀-的关键词将在搜索结果中被排除。

  1. hello world 表示必须包含 helloworld
  2. hello -world 表示必须包含 hello 但不包含 world

开发者指南

依赖项由 govendor 管理

  1. 构建开发版本。assets 目录必须存在
$ go build $ ./gohttpserver
  1. 构建单一二进制发布版本
$ go build

主题定义在 assets/themes 目录中。目前只有两个可用的主题,"black" 和 "green"。

参考网站

Go库

历史

旧版本托管在 https://github.com/codeskyblue/gohttp

许可证

本项目采用 MIT 许可证。

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多