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)
相关推荐
赛博郎中4 分钟前
pygame小游戏飞机大战_8继承精灵玩家优化
python·pygame
William一直在路上16 分钟前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习1 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前1 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程
曳渔1 小时前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
trayvontang1 小时前
Python虚拟环境与包管理工具(uv、Conda)
python·conda·uv·虚拟环境·miniconda·miniforge
伊织code1 小时前
pdfminer.six
python·pdf·图片·提取·文本·pdfminer·pdfminer.six
三千道应用题1 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf
hqxstudying2 小时前
JAVA项目中邮件发送功能
java·开发语言·python·邮件
咪咪渝粮2 小时前
JavaScript 中constructor 属性的指向异常问题
开发语言·javascript