Huanglei

I’m PADI No.1409AZ6094

0%

文件服务器

最近实现了一个局域网文件共享下载与上传服务器。它基于 Python 内置的 http.server 模块进行了深度定制,不仅支持文件的浏览和下载,核心亮点在于支持整个文件夹的拖拽上传、权限控制以及内网环境优化(适合公安网)。

基于Python3.14 写了两个脚本(适用于Windows和MacOS的不同实现),需要脚本的可以电邮我,免费送。

用Python3.14的pyinstaller插件打包了 Windows 和 MacOS 的版本可执行文件,使用时一键执行。

1
pyinstaller -F Windows_run.py -n "文件服务器" --hidden-import=cgi --hidden-import=socket -y
1
pyinstaller --name "文件服务器" --hidden-import multipart MacOS_run.py

以下是该脚本的主要功能模块详解(需求文档):

  1. 核心功能:文件服务与上传
    基础文件服务器:
    启动一个 HTTP 服务器(默认端口 8000),允许用户通过浏览器访问指定目录。
    提供文件列表浏览、文件下载功能。
    自动隐藏配置文件(如 config.ini, uploads.json 等)以防被直接下载。
    强大的文件夹上传(核心亮点):
    拖拽上传:前端页面实现了拖拽区域,用户可以直接将文件或整个文件夹拖入浏览器进行上传。
    目录结构保持:代码中自定义了 parse_multipart 函数,手动解析 multipart/form-data 请求。这使得它能够识别并保留上传文件夹的完整目录结构(利用 webkitRelativePath),而不仅仅是上传扁平的文件列表。
    大文件支持:设置了较长的超时时间(300秒),并在前端提示大型文件夹上传可能需要时间,防止因超时导致的中断。
    自动重命名:如果上传的文件名已存在,会自动在文件名后添加 _1, _2 等后缀,避免覆盖原有文件。

  2. 权限与安全控制 (Permission Mode)
    代码引入了一套简单的权限管理系统,通过 uploads.json 记录元数据:
    上传锁定:所有通过该服务器上传的文件都会被记录在 uploads.json 中,并标记为 protected: True。
    下载限制:
    如果开启 permission_mode = true(默认配置),用户上传的文件默认禁止下载(返回 403 Forbidden)。
    白名单机制:只有在配置文件 config.ini 的 allow_download 中设置了文件通配符(如 *.txt, public_*),匹配的文件才允许被下载。
    非上传的原有文件(服务器启动前就存在的文件)不受此限制,默认可下载。
    信息记录:上传时会记录文件大小、上传时间、上传者 IP 地址。

  3. 配置与初始化
    自动配置生成:如果找不到 config.ini,程序会自动创建一个默认配置文件,设置标题、端口、隐藏文件列表和权限模式。
    灵活配置:支持通过 config.ini 自定义:
    网页标题 (page_title) 和副标题。
    服务端口 (port)。
    需要隐藏的文件名 (hide_files)。
    是否开启权限模式 (permission_mode)。
    允许下载的文件类型模式 (allow_download)。
    路径锁定:程序启动时会自动锁定脚本所在的目录作为根目录,确保文件操作不会超出预期范围。支持打包成 .exe 后的路径识别。

  4. 用户体验 (UI/UX)
    美观的前端界面:
    使用了内嵌的 CSS 样式,界面简洁现代(类似 Material Design 风格)。
    显示文件大小、上传时间、上传者 IP。
    对于受保护的文件,显示“禁止下载”或“可下载”的状态徽章。
    交互反馈:
    上传时有明确的“正在上传”提示。
    处理完成后自动刷新页面以显示新文件。
    针对网络超时或中断提供了友好的提示信息(提示用户后台可能仍在保存)。
    内网适配:
    启动时会自动检测并打印局域网 IP 地址(如 http://192.168.x.x:8000),方便同一局域网下的其他设备访问。
    标题默认标注“(纯内网环境)”。

  5. 技术实现细节
    手动解析 Multipart 数据:为了避免第三方库依赖和解码问题,作者重写了 parse_multipart 方法,直接从二进制流中提取文件名和内容,这对于处理包含中文路径或特殊字符的文件夹上传非常关键。
    跨域支持 (CORS):在响应头中添加了 Access-Control-Allow-Origin: *,允许跨域请求,方便与其他前端工具集成。
    日志静音:重写了 log_message 方法,屏蔽了默认的 HTTP 请求日志,使控制台输出更清晰,只保留关键的上传/错误信息。

总结

这是一个专为内网(公安网可用)环境设计的私有文件交换站。
适用场景:团队内部临时文件收集、大文件夹备份、隔离网络环境下的数据交换。
主要优势:无需安装 Nginx/Apache,单文件运行,支持完整的文件夹结构上传,且具备基本的“只进不出”(除非配置白名单)的安全特性,防止敏感上传文件被随意泄露。
如何使用:
确保安装了 Python 3。
运行脚本:python run.py (假设文件名为 run.py)。
在浏览器访问显示的 IP 地址(如 http://127.0.0.1:8000 或局域网 IP)。
拖拽文件或文件夹到页面即可上传。

-------------本文结束 感谢阅读-------------
  • 本文作者: HuangLei
  • 本文链接: https://maxlay.github.io/2026/03/21/文件服务器/
  • 版权声明: 本博客所有原创文章(除文末特别标注转载或特殊声明外),均采用知识共享署名。非商业性使用 ,相同方式共享 4.0 国际许可协议 BY-NC-SA 进行许可。
    您可以:自由地分享(复制、分发、传播)和演绎(修改、改编、创作衍生作品)。
    须遵守署名(BY):必须给出适当的信用,提供指向本许可协议的链接,并指出是否进行了修改。转载请注明出处及原文链接。禁止整站搬运、禁止去除作者信息、禁止用于自媒体洗稿盈利。
    非商业性使用(NC):您不得将本作品用于商业目的。
    相同方式共享(SA):如果您再混合、转换或者基于本作品进行创作,您必须基于与原作品相同的许可协议分发您的贡献。

    商业授权:如需商业用途(包括但不限于出版、付费课程、企业内训等),请事先联系作者获取书面授权。任何形式的商用、二次分发、改编后商用均需授权。本网站所有技术分享严格遵守《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》及相关法律法规。
    用途限制:站内涉及渗透测试、漏洞分析、逆向工程、脚本工具等技术内容,仅限用于合法的教育、学术研究及获得明确授权的安全测试场景。
    禁止行为:任何个人或组织不得利用本站提供的技术信息、代码或工具从事危害网络安全、侵入他人系统、干扰网络正常功能及防护措施等非法活动。
    责任自负:使用者应严格遵守法律法规,因滥用本站内容而导致的任何法律纠纷、经济损失或刑事责任,均由使用者自行承担,与本站及作者无关。作者不对任何因使用本站内容而产生的后果负责。

    技术具有时效性,本站部分内容可能随时间推移而过时或不准确。作者尽力保证内容的正确性,但不对其准确性、完整性、适用性或及时性做任何明示或暗示的保证。读者在参考本站内容进行实际操作(如修改配置、运行代码)前,请务必在测试环境中验证,并做好数据备份。尊重知识产权,保护网络安全,本站不提供任何系统、网站、设备的渗透目标,所有技术仅用于学习与防护。若您认为本站内容侵犯了您的合法权益,或发现本站存在违法违规内容,请通过左侧电子邮箱联系作者,作者将尽快核实并处理。

    本声明自2012年5月5日起生效