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

发布于:2025-08-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

在单位内网环境中,我经常需要收集 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初学者学习参考。如果你有文件收集的需求,不妨试试这个工具,或者基于它进行二次开发,定制更符合自己需求的功能。


网站公告

今日签到

点亮在社区的每一天
去签到