python内网上传下载工具

python内网上传下载工具

利用python的nicegui写了一个内网下载工具,支持上传和下载。

这样的工具很多,但是利用这个模块可以用很少的代码做一个比较好看的页面。

上传的文件会存在当前目录下生成一个upload文件夹中;下载则是读取upload文件夹。

首先下载模块

python 复制代码
pip install nicegui

代码

python 复制代码
from nicegui import app, ui
import os

# 如果目录不存在,则创建
directory = f'./upload/'
if not os.path.exists(directory):
    os.makedirs(directory)

app.add_static_files('/upload', 'upload')

with ui.row():
    with ui.button(on_click=lambda: ui.open('/uploadfile')):
        ui.label('上传')
        ui.icon('upload').classes('rounded-full w-16 h-16 ml-4')

    with ui.button(on_click=lambda: ui.open('/downloadfile')):
        ui.label('下载')
        ui.icon('download').classes('rounded-full w-16 h-16 ml-4')


def save_file(content, filename):
    """保存文件"""
    try:
        # 完整的文件路径
        file_path = os.path.join(directory, filename)

        with open(file_path, 'wb') as f:  # 保存图片
            f.write(content)
            ui.notify(f'{filename} 保存成功', color='positive')
    except Exception as e:
        ui.notify(e)


def list_files_and_dirs(directory):
    file_list = []
    for root, dirs, files in os.walk(directory):
        for name in files:
            file_list.append(os.path.join(root, name))
    return file_list


@ui.page('/uploadfile')
async def upload_page():
    with ui.row():
        with ui.button(on_click=lambda: ui.open('/')):
            ui.icon('arrow_back')
        ui.label('文件上传').classes('text-h5')
        with ui.button(on_click=lambda: ui.open('/downloadfile')):
            ui.icon('download')
    ui.upload(on_upload=lambda e: save_file(e.content.read(), e.name),
              on_rejected=lambda: ui.notify('Rejected!')).classes('max-w-full')


@ui.page('/downloadfile')
async def upload_page():
    file = list_files_and_dirs(directory)
    with ui.row():
        with ui.button(on_click=lambda: ui.open('/')):
            ui.icon('arrow_back')
        ui.label('文件下载').classes('text-h5')
        with ui.button(on_click=lambda: ui.open('/uploadfile')):
            ui.icon('upload')

    for i in file:
        with ui.item(on_click=lambda: ui.notify('开始下载...')):
            with ui.item_section().props('avatar'):
                ui.icon('download')
            with ui.item_section():
                ui.link(f'{i.replace(directory, "")}', i)


ui.run(title='文件上传下载工具', host='0.0.0.0', port=8080)
相关推荐
萧曵 丶9 分钟前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl13 分钟前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
收破烂的小熊猫~21 分钟前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
蹦蹦跳跳真可爱5891 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij1 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien1 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
阿蒙Amon1 小时前
为什么 12 版仍封神?《C# 高级编程》:从.NET 5 到实战架构,进阶者绕不开的必修课
开发语言·c#
无小道1 小时前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
爱莉希雅&&&1 小时前
技术面试题,HR面试题
开发语言·学习·面试