1. 概述
你是否曾经遇到过这样的场景:
- 需要在多台设备间快速传输文件,但懒得插 u 盘?
- 想临时共享一个本地文件,但又不想折腾 ftp、网盘、邮件?
- 希望一键开启本地 http 服务器,还能生成二维码,手机直接扫码访问?
今天,我们就用 python 轻松实现 “一键 http 文件共享”,同时结合二维码技术,让访问更简单。最终,我们还将用 pyqt6 开发一个简洁美观的 gui,让整个工具更易用!
本文将带你完整实现该工具,包括:
用 python 快速搭建本地 http 服务器(支持 ipv4 & ipv6)
自动生成访问地址的二维码,手机扫一扫即可访问
打造 pyqt6 图形界面,一键选择共享目录并启动服务
准备好了吗?让我们开始吧!
2. 快速搭建 http 文件共享服务
2.1 核心思路
python 自带 http.server 模块,可以快速启动一个 http 服务器。我们基于它创建支持 ipv4 和 ipv6 的双栈服务器,并允许用户自定义共享目录。
2.2 代码实现
import http.server import socketserver import threading class server: def __init__(self, port=80): self.port = port self.stop_event = threading.event() def run_server(self, ipv4="0.0.0.0", ipv6="::"): self.stop_event.clear() threading.thread(target=self.start_http_server_v4, args=(ipv4, self.port)).start() threading.thread(target=self.start_http_server_v6, args=(ipv6, self.port)).start() def start_http_server_v4(self, ip, port): with socketserver.tcpserver((ip, port), http.server.simplehttprequesthandler) as httpd: httpd.serve_forever() def start_http_server_v6(self, ip, port): with socketserver.tcpserver((ip, port), http.server.simplehttprequesthandler) as httpd: httpd.serve_forever()
2.3 代码解读
- run_server() 方法启动两个线程,同时运行 ipv4 和 ipv6 服务器。
- http.server.simplehttprequesthandler 允许 http 服务器直接提供文件下载。
- serve_forever() 让服务器一直运行,直到手动停止。
这样,我们的本地 http 服务器就可以随时启动,提供文件共享服务!
3. 二维码访问:手机扫一扫,文件即刻传输
3.1 为什么用二维码
问题:服务器启动后,如何让手机或其他设备快速访问?
解决方案:生成一个二维码,直接嵌入本地 http 服务器的访问 url,用户用手机扫描即可访问!
3.2 代码实现
import qrcode import clipboard def generate_qr_and_copy(url): qr = qrcode.qrcode( version=1, error_correction=qrcode.constants.error_correct_l, box_size=10, border=2 ) qr.add_data(url) qr.make(fit=true) qr.print_ascii(invert=true) clipboard.copy(url) print(f"url {url} 已复制到剪贴板")
3.3 代码解读
- qrcode.qrcode 生成二维码,并自动调整大小。
- qr.print_ascii(invert=true) 在终端打印二维码,便于调试。
- clipboard.copy(url) 复制 url,方便直接粘贴使用。
现在,用户只需要扫描二维码,即可访问共享的文件!
4. pyqt6 图形界面:让工具更易用!
4.1 为什么要 gui
虽然命令行很强大,但对于非开发者来说,图形界面更直观。我们使用 pyqt6 创建一个简洁的 ui,用户可以一键选择共享目录,并获取访问二维码。
4.2 代码实现
from pyqt6 import qtwidgets, qtcore from pyqt6.qtgui import qguiapplication class ui_mainwindow: def setupui(self, mainwindow): screen = qguiapplication.primaryscreen().geometry() window_width, window_height = int(screen.width() / 6), int(screen.height() / 3) mainwindow.resize(window_width, window_height) self.centralwidget = qtwidgets.qwidget(mainwindow) self.gridlayout = qtwidgets.qgridlayout(self.centralwidget) self.label = qtwidgets.qlabel("二维码", self.centralwidget) self.gridlayout.addwidget(self.label, 0, 0) self.combobox = qtwidgets.qcombobox(self.centralwidget) self.combobox.additems(["默认目录", "剪切板目录", "自定义目录"]) self.gridlayout.addwidget(self.combobox, 1, 0) self.url_label = qtwidgets.qlabel("服务地址", self.centralwidget) self.gridlayout.addwidget(self.url_label, 2, 0) mainwindow.setcentralwidget(self.centralwidget)
4.3 界面功能
✅ 选择共享目录
✅ 显示服务器访问地址
✅ 二维码自动更新
5. 终极效果演示
- 运行 gui,选择共享目录
- 点击“启动服务器”
- 获取 url 并自动生成二维码
- 手机扫码即可访问!
这样,我们的“python 本地 http 文件共享 + 二维码访问”工具就完成了!
6. 总结 & 未来优化方向
6.1 主要收获
✅ 你学会了 如何用 python 搭建本地 http 服务器
✅ 你掌握了 二维码的生成和自动复制功能
✅ 你了解了 如何用 pyqt6 创建 gui 界面
6.2 未来优化
支持文件上传:目前只支持下载,可以加上文件上传功能
支持 https 加密:增强安全性,防止中间人攻击
优化界面美观度:增加主题风格、自定义端口等
到此这篇关于使用python实现快速搭建本地http服务器的文章就介绍到这了,更多相关python本地http服务器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论