最近实现了一个局域网文件共享下载与上传服务器。它基于 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 |
以下是该脚本的主要功能模块详解(需求文档):
核心功能:文件服务与上传
基础文件服务器:
启动一个 HTTP 服务器(默认端口 8000),允许用户通过浏览器访问指定目录。
提供文件列表浏览、文件下载功能。
自动隐藏配置文件(如 config.ini, uploads.json 等)以防被直接下载。
强大的文件夹上传(核心亮点):
拖拽上传:前端页面实现了拖拽区域,用户可以直接将文件或整个文件夹拖入浏览器进行上传。
目录结构保持:代码中自定义了 parse_multipart 函数,手动解析 multipart/form-data 请求。这使得它能够识别并保留上传文件夹的完整目录结构(利用 webkitRelativePath),而不仅仅是上传扁平的文件列表。
大文件支持:设置了较长的超时时间(300秒),并在前端提示大型文件夹上传可能需要时间,防止因超时导致的中断。
自动重命名:如果上传的文件名已存在,会自动在文件名后添加 _1, _2 等后缀,避免覆盖原有文件。权限与安全控制 (Permission Mode)
代码引入了一套简单的权限管理系统,通过 uploads.json 记录元数据:
上传锁定:所有通过该服务器上传的文件都会被记录在 uploads.json 中,并标记为 protected: True。
下载限制:
如果开启 permission_mode = true(默认配置),用户上传的文件默认禁止下载(返回 403 Forbidden)。
白名单机制:只有在配置文件 config.ini 的 allow_download 中设置了文件通配符(如 *.txt, public_*),匹配的文件才允许被下载。
非上传的原有文件(服务器启动前就存在的文件)不受此限制,默认可下载。
信息记录:上传时会记录文件大小、上传时间、上传者 IP 地址。配置与初始化
自动配置生成:如果找不到 config.ini,程序会自动创建一个默认配置文件,设置标题、端口、隐藏文件列表和权限模式。
灵活配置:支持通过 config.ini 自定义:
网页标题 (page_title) 和副标题。
服务端口 (port)。
需要隐藏的文件名 (hide_files)。
是否开启权限模式 (permission_mode)。
允许下载的文件类型模式 (allow_download)。
路径锁定:程序启动时会自动锁定脚本所在的目录作为根目录,确保文件操作不会超出预期范围。支持打包成 .exe 后的路径识别。用户体验 (UI/UX)
美观的前端界面:
使用了内嵌的 CSS 样式,界面简洁现代(类似 Material Design 风格)。
显示文件大小、上传时间、上传者 IP。
对于受保护的文件,显示“禁止下载”或“可下载”的状态徽章。
交互反馈:
上传时有明确的“正在上传”提示。
处理完成后自动刷新页面以显示新文件。
针对网络超时或中断提供了友好的提示信息(提示用户后台可能仍在保存)。
内网适配:
启动时会自动检测并打印局域网 IP 地址(如 http://192.168.x.x:8000),方便同一局域网下的其他设备访问。
标题默认标注“(纯内网环境)”。技术实现细节
手动解析 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)。
拖拽文件或文件夹到页面即可上传。