Python 编程实战:本地 HTTP 文件共享 + 二维码访问,一键搞定!

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 技巧!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创客白泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值