很多时候,我们只是想:
这时候,一个“纯 Python、本地运行、浏览器即可访问”的局域网传输工具就非常实用了。
本文基于 Python 标准库实现一个:
的轻量级局域网文件传输服务器。
一、项目效果
启动后:
终端会显示:
🚀 文件传输服务器已启动
📍 本机访问:
http://127.0.0.1:8000
📱 手机/局域网访问:
http://192.168.1.8:8000
手机连接同一个 WiFi 后:
在浏览器输入:
即可打开上传页面。
二、普通用户使用说明
1. 需要准备什么?
只需要:
2. 安装 Python
前往:
Python 官网
下载安装即可。
安装时记得勾选:
3. 保存代码
将代码保存为:
4. 启动服务器
打开终端:
Windows:
Mac / Linux:
进入代码目录:
运行:
5. 手机访问
程序启动后会显示:
手机浏览器输入即可。
6. 可以做什么?
文本发送
适合:
发送后:
自动保存为:
文件上传
支持:
上传后自动保存到:
7. 常见问题
手机打不开页面?
检查:
(1)是否连接同一 WiFi
手机和电脑必须同网络。
(2)防火墙是否阻止 Python
Windows 首次运行会弹窗:
点击:
(3)端口是否被占用
如果 8000 被占用:
修改:
例如:
接下来是面向开发者的内容
下面进入代码设计部分。
四、整体架构
整个项目只依赖:
http.server
socket
urllib.parse
json
os
re
datetime
属于:
核心架构:
浏览器
↓
HTTPServer
↓
BaseHTTPRequestHandler
↓
FileTransferHandler
五、HTTPServer 工作原理
核心入口:
httpd=HTTPServer(server_address, FileTransferHandler)
这里:
HTTPServer
FileTransferHandler
六、自定义 Handler
核心类:
classFileTransferHandler(BaseHTTPRequestHandler):
它继承:
重写:
七、GET 请求:返回网页
访问:
时返回 HTML 页面。
关键代码:
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
然后:
self.wfile.write(html.encode('utf-8'))
输出网页内容。
八、POST 请求:接收上传
根据:
判断上传类型。
文本上传
application/x-www-form-urlencoded
对应:
服务器使用:
解析数据。
文件上传
浏览器:
发送。
九、为什么不用 cgi?
Python 新版本:
已经逐渐弃用。
因此代码选择:
兼容:
十、multipart 解析原理
核心:
浏览器上传的数据结构:
--boundary
Content-Disposition: form-data
...
文件内容
--boundary--
代码:
parts=data.split(b'--'+boundary.encode())
分割各部分。
然后:
提取文件名。
十一、文件安全处理
代码里做了:
safe_name=re.sub(r'[<>:"/\\|?*]', '_', name)
避免:
时间戳防重名
timestamp=datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
生成:
image_20260516_120101.png
避免覆盖。
十二、自动获取局域网 IP
核心:
socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
通过:
获取本机出口 IP。
最终得到:
十三、前端页面设计
页面使用:
实现:
无需:
十四、为什么体验很好?
因为:
1. 不刷新页面
使用:
异步上传。
2. 自动预览文本
防止 HTML 注入。
3. 移动端适配
使用:
@media (max-width: 600px)
适配手机。
十五、可以继续扩展什么?
这个项目非常适合作为:
继续扩展:
1. 下载文件列表
增加:
即可实现在线下载。
2. 图片预览
返回:
即可浏览图片。
3. 拖拽上传
前端监听:
即可。
4. 多文件上传
<inputtype="file"multiple>
5. 上传进度条
使用:
XMLHttpRequest.upload.onprogress
6. 二维码访问
可以集成:
qrcode Python 库
自动生成手机扫码地址。
7. 用户认证
增加:
避免局域网任意访问。
十六、安全性提醒
当前项目适合:
不建议直接暴露公网。
因为: