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)
相关推荐
专注VB编程开发20年1 小时前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode
郭庆汝5 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
黄雪超8 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice8 小时前
对象的finalization机制Test
java·开发语言·jvm
思则变8 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
lijingguang9 小时前
在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
开发语言·c#
漫谈网络9 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
¥-oriented9 小时前
【C#中路径相关的概念】
开发语言·c#
CoderCodingNo9 小时前
【GESP】C++四级考试大纲知识点梳理, (7) 排序算法基本概念
开发语言·c++·排序算法
恋猫de小郭10 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin