欢迎光临UUpython
最大、最新、最全的Python代码收集站

 通过右键生成链接在局域网内分享文件

这段代码是一个使用Flask创建文件下载服务器的脚本,并在文件右键菜单中添加了“分享此文件”的选项。它能够将指定的文件通过HTTP提供下载,并在本地生成一个随机端口的服务器。

以下是代码的主要功能和流程:

  1. 导入所需的模块:导入了Flask、send_from_directory、os、sys、netifaces、random、pyperclip、winreg等模块。
  2. 定义启动Flask服务器的函数:start_flask_server函数用于启动Flask服务器。该服务器提供文件下载服务。
  3. 获取物理网卡IP:get_wired_ip函数使用netifaces库获取物理网卡的IP地址。
  4. 写入注册表项:write_registry_entry函数用于写入注册表项,以添加“分享此文件”的右键菜单选项。
  5. 读取注册表值:read_registry_value函数用于读取注册表值,以获取Python的执行路径。
  6. 主程序入口:在if __name__ == '__main__':中,首先获取命令行参数和Python可执行路径,然后写入注册表项。
  7. 如果没有命令行参数:如果没有传入文件参数,提示用户通过右键菜单运行程序,并等待用户输入回车键退出程序。
  8. 如果有命令行参数:如果有传入文件参数,获取文件路径、文件名、物理网卡IP和随机端口。然后在终端打印文件下载地址,并将地址复制到剪贴板。
  9. 启动Flask服务器:调用start_flask_server函数启动Flask服务器,提供文件下载服务。

这段代码实现了一个方便的文件分享工具,可以在右键菜单中快速分享指定的文件。用户右键选择文件,点击“分享此文件”,即可在终端获取文件的下载地址,然后可以将下载地址分享给其他人。需要注意的是,此脚本需要在Windows系统上运行。

# -*- coding: utf-8 -*-
 
from flask import Flask, send_from_directory
import os
import sys
import netifaces
import random
import pyperclip
import winreg
 
def start_flask_server(p,fol):
    app = Flask(__name__)
 
    @app.route('/download/<filename>', methods=['GET'])
    def download_file(filename):
        file_path = os.path.join(fol, filename)
        if not os.path.exists(file_path):
            return "文件不存在", 404
        return send_from_directory(fol, filename, as_attachment=True, conditional=True)
          
    app.run(host='0.0.0.0', port=p, debug=False, threaded=True)
 
def get_wired_ip():
    try:
        interfaces = netifaces.interfaces()
        for interface in interfaces:
            addresses = netifaces.ifaddresses(interface)
            if netifaces.AF_INET in addresses:
                for address in addresses[netifaces.AF_INET]:
                    ip_address = address['addr']
                    if ip_address != '127.0.0.1':
                        return ip_address
    except (KeyError, IndexError):
        pass
    return "未找到物理网卡IP"
 
def write_registry_entry(epath, ico):
    reg_path = r"*\shell\Share File"
    key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, reg_path)
    winreg.SetValue(key, None, winreg.REG_SZ, "分享此文件")
    winreg.SetValueEx(key, 'ICON', 0, winreg.REG_SZ, ico)
    winreg.CloseKey(key)
 
    command_path = r"*\shell\Share File\command"
    command_key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, command_path)
    winreg.SetValue(command_key, None, winreg.REG_SZ, epath + ' "%1"')
    winreg.CloseKey(command_key)
 
def read_registry_value():
    try:
        key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"Python.File\Shell\open\command")
        value, _ = winreg.QueryValueEx(key, "")
        winreg.CloseKey(key)
        value = value.split('"')
        return value[1]
    except OSError:
        print("注册表项不存在")
    except Exception as e:
        print(f"读取注册表值时出现错误: {e}")
 
 
if __name__ == '__main__':
    args = sys.argv
    executable_path = os.path.abspath(sys.executable)
    if getattr(sys, 'frozen', False):
        exe = icon = '"' + executable_path + '"'
    else:
        pypath = read_registry_value()
        exe = '"' + pypath + '" "' + args[0] + '"'
        icon = '"' + pypath + '"'
 
    write_registry_entry(exe,icon)
 
    if len(args) - 1==0:
        print("请通过右键菜单运行此程序")
        input("按回车键退出程序")
        sys.exit(0)
    file = args[1]
    path = os.path.dirname(file)
    filename = os.path.basename(file)
    ip = get_wired_ip()
    port = random.randint(10000, 65500)
    url = "http://" + ip + ":" + str(port) + "/download/" + filename
    print("\n↓↓文件下载地址已复制到剪贴板↓↓\n\n " + url + " \n")
    print("↑↑文件下载地址已复制到剪贴板↑↑\n\n\n52pojie\n")
 
    pyperclip.copy(url)
    start_flask_server(port,path)
    
赞(0) 打赏
未经允许不得转载:UUpython »  通过右键生成链接在局域网内分享文件
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!