Python 编程实战:本地 HTTP 文件共享 + 二维码访问,一键搞定!
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 代码实现
python复制编辑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 代码实现
python复制编辑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 加密:增强安全性,防止中间人攻击
- 优化界面美观度:增加主题风格、自定义端口等
🚀 代码已经开源,欢迎交流 & 扩展!
7. 代码资源 & 交流
💡 源码及资源下载
📢 欢迎 Star & 关注,一起探索更多 Python 技巧!