python内网上传下载工具
利用python的nicegui写了一个内网下载工具,支持上传和下载。
这样的工具很多,但是利用这个模块可以用很少的代码做一个比较好看的页面。
上传的文件会存在当前目录下生成一个upload文件夹中;下载则是读取upload文件夹。
首先下载模块
pip install nicegui
代码
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)