【原创】基于 Flask 的简单文件收集器
在单位内网环境中,我经常需要收集 pdf 格式的记录表。于是我基于 ai ide,开发了一个基于 Flask 开发的轻量级文件上传服务项目,部署在单位飞腾芯的银河麒麟系统上(当然由于 python 的跨平台,在 windows 和 mac 上也可部署),可以快速搭建一个文件收集平台。
项目简介
EasyUpload 是一个极简的文件上传与浏览服务,基于 Flask 开发。专门用于琐碎文件收集的轻量级文件上传服务。它具有以下特点:
- 简单易用:支持拖拽上传和点击选择文件
- 安全控制:支持密码保护和IP限制
- 文件管理:提供文件浏览和下载功能
- 预览功能:支持图片、文本、PDF和Office文档预览
- 二维码分享:可生成文件下载二维码
项目截图
核心功能实现
1. 文件上传处理
项目的核心是文件上传功能,通过/uploadFiles
路由处理:
@app.route('/uploadFiles', methods=['POST'])
def upload_files():# 处理多个文件上传# 检查文件类型和大小限制# 根据设备名重命名文件避免冲突
上传的文件会按日期分类存储,并根据设备名进行命名,防止文件名冲突。
2. 文件浏览功能
通过/browse
路由可以查看当天上传的所有文件:
@app.route('/browse', methods=['GET'])
def browse_files():# 检查权限和IP限制# 读取当天上传的文件列表# 提供文件类型、大小、上传时间等信息
浏览页面提供了丰富的功能:
- 显示文件详细信息(类型、大小、上传时间)
- 支持文件预览(文本、图片、PDF、Office文档)
- 提供下载链接和二维码分享
3. 安全机制
项目实现了多层次的安全控制:
- 密码保护:可以设置上传密码和超级管理员密码
- IP限制:支持类似.gitignore的IP黑白名单规则
- 权限控制:区分普通用户和超级用户权限
def is_ip_blocked(ip: str, rules: List[str]) -> bool:"""类似 .gitignore 的匹配规则:- 支持通配符 * 和 ?- 支持 ! 开头的白名单规则(优先级高于黑名单)- 白名单一旦匹配,立即放行"""
部署方式
项目支持多种部署方式:
- 开发环境:直接使用Flask内置服务器
- 生产环境:推荐使用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初学者学习参考。如果你有文件收集的需求,不妨试试这个工具,或者基于它进行二次开发,定制更符合自己需求的功能。