当前位置: 首页 > news >正文

【原创】基于 Flask 的简单文件收集器

在单位内网环境中,我经常需要收集 pdf 格式的记录表。于是我基于 ai ide,开发了一个基于 Flask 开发的轻量级文件上传服务项目,部署在单位飞腾芯的银河麒麟系统上(当然由于 python 的跨平台,在 windows 和 mac 上也可部署),可以快速搭建一个文件收集平台。

项目简介

EasyUpload 是一个极简的文件上传与浏览服务,基于 Flask 开发。专门用于琐碎文件收集的轻量级文件上传服务。它具有以下特点:

  1. 简单易用:支持拖拽上传和点击选择文件
  2. 安全控制:支持密码保护和IP限制
  3. 文件管理:提供文件浏览和下载功能
  4. 预览功能:支持图片、文本、PDF和Office文档预览
  5. 二维码分享:可生成文件下载二维码

项目截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

核心功能实现

1. 文件上传处理

项目的核心是文件上传功能,通过/uploadFiles路由处理:

@app.route('/uploadFiles', methods=['POST'])
def upload_files():# 处理多个文件上传# 检查文件类型和大小限制# 根据设备名重命名文件避免冲突

上传的文件会按日期分类存储,并根据设备名进行命名,防止文件名冲突。

2. 文件浏览功能

通过/browse路由可以查看当天上传的所有文件:

@app.route('/browse', methods=['GET'])
def browse_files():# 检查权限和IP限制# 读取当天上传的文件列表# 提供文件类型、大小、上传时间等信息

浏览页面提供了丰富的功能:

  • 显示文件详细信息(类型、大小、上传时间)
  • 支持文件预览(文本、图片、PDF、Office文档)
  • 提供下载链接和二维码分享
3. 安全机制

项目实现了多层次的安全控制:

  1. 密码保护:可以设置上传密码和超级管理员密码
  2. IP限制:支持类似.gitignore的IP黑白名单规则
  3. 权限控制:区分普通用户和超级用户权限
def is_ip_blocked(ip: str, rules: List[str]) -> bool:"""类似 .gitignore 的匹配规则:- 支持通配符 * 和 ?- 支持 ! 开头的白名单规则(优先级高于黑名单)- 白名单一旦匹配,立即放行"""

部署方式

项目支持多种部署方式:

  1. 开发环境:直接使用Flask内置服务器
  2. 生产环境:推荐使用Gunicorn(Linux)或Waitress(Windows)
# 安装依赖
pip install Flask PyYAML qrcode[pil]# 开发环境运行
python app.py# 生产环境(Linux)
gunicorn -w 4 -b 0.0.0.0:8000 app:app# 生产环境(Windows)
waitress-serve --listen=0.0.0.0:8000 app:app

配置说明

通过user_settings.yml文件可以轻松配置各项功能:

# 是否启用文件浏览功能
browse_enabled: true# 上传页面密码(留空则不启用)
upload_password: ""# 是否启用超级管理员功能
super_enabled: true# 超级管理员密码
super_password: "admin123"# 文件大小限制(字节)
max_file_size: 104857600# 禁止上传的文件类型
blacklist_extensions:- "exe"- "bat"- "sh"

总结

这个轻量级文件上传服务项目展示了如何使用 Flask 快速构建一个实用的文件管理工具。它不仅功能完善,而且具有良好的安全性和可扩展性。通过简单的配置,就可以满足各种文件收集和分享需求。

项目代码结构清晰,注释详细,非常适合Flask初学者学习参考。如果你有文件收集的需求,不妨试试这个工具,或者基于它进行二次开发,定制更符合自己需求的功能。

http://www.dtcms.com/a/322956.html

相关文章:

  • 【33】C#实战篇——点击按钮弹出指定路径对话框,选择指定类型文件;;;文件过滤器显示指定的一种文件,几种类型文件 同时显示
  • Pytest中实现自动生成测试用例脚本代码
  • 扩散LLM推理新范式:打破生成长度限制,实现动态自适应调节
  • 在ubuntu服务器下安装cuda和cudnn(笔记)
  • ImageJ 实用技巧:通过 Overlay 实现图像透明标记的完整教程
  • NTP /Chrony 网络时间协议
  • 当配置项只支持传入数字,即无法指定单位为rem,需要rem转px
  • 本地连接跳板机
  • 【Windows】成批复制某个特定的文件
  • 《算法导论》第 13 章 - 红黑树
  • 基于Dify实现对Excel的数据分析--动态配置图表
  • pytorch+tensorboard+可视化CNN
  • 物理AI与人形机器人:从实验室到产业化的关键跨越
  • 多线程和多进程编程中常见的性能瓶颈问题
  • C# 异步编程(使用异步Lambda表达式)
  • 专题二_滑动窗口_找到字符串中所有字母异位词
  • Arduino系列教程:点亮一个LED灯
  • 本地部署网络流量分析工具 ntopng 并实现外部访问( Windows 版本
  • C++高频知识点(十七)
  • 【lucene】HitsThresholdChecker命中阈值检测器
  • istio笔记03--快速上手多集群mesh
  • 本地WSL ubuntu部署whisper api服务
  • NVIDIA Jetson JetPack 全面解析:从硬件到定制镜像
  • 智能情趣设备、爆 bug:可被远程操控。。。
  • 目标检测数据集 - 无人机检测数据集下载「包含COCO、YOLO两种格式」
  • Python 中的 Mixin
  • 二十、MySQL-DQL-条件查询
  • 第八章:终极合体 —— 实现智能一键分组
  • 【Python 工具人快餐 · 第 1 份】
  • 【代码随想录|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项】