在单位内网环境中,我经常需要收集 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.pswp.cn/news/918215.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918215.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918215.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Java的Day28

今天在昨天完成的留言板项目基础上,我进一步开发了一个酒店房型管理系统。该系统采用MVC架构,主要功能是对酒店房型信息进行增删改查操作。数据库设计方面,我创建了hotel_room_type表,包含以下字段:id:主键…

Leetcode——556. 下一个更大元素 III

题目链接:556. 下一个更大元素 III (由于图片上传失败,不贴原题目了,有需要可以前往力扣查看) 本文给出该题的单调栈做法,同时绕过所有库函数,所有逻辑均自行实现。 本题的思路就是从右向左按…

Idea打包可执行jar,MANIFEST.MF文件没有Main-Class属性:找不到或无法加载主类

背景:IDEA传统方法【Project structure】-->artifact---->build的模式,打包【Maven】项目,发现生成的可执行jar包,显示【找不到或无法加载主类】。但是用【Maven】的Assembly可以正常生成。期望用传统方法实现打jar包方法&a…

检索增强生成:RAG(Retrieval Augmented Generation)

什么是 RAG?为什么使用 RAG?LLM 微调 和 RAG?实战什么是 RAG? RAG 在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中被引入,原论文是这样描述的: 探索了一种 通用的 检索增…

Android 设置/修改系统NTP服务地址

Android 手机的 NTP 时间同步(网络时间同步)主要依赖网络,但系统时间来源还包括其他方式,整体时间校准机制是多种来源的结合。具体可分为以下几类: 1. 网络 NTP 同步(最主要方式) 这是 Androi…

Ubuntu22.04 安装vitis2023.2 卡在“Generating installed device list“.

关于这个问题,xilinx有官方说明,链接 原因:问题是 Ubuntu 20.04 缺少 libtinfo.so.5 库。 解决办法: sudo apt-get install libtinfo5

前端全栈修炼手册:从 Vue3 到工程化的进阶之路

本文将全方位覆盖前端开发的核心知识,从 Vue3 框架的基础语法到复杂的工程化实践,从包管理工具的使用到模块规范的深入理解,带你踏上从入门到精通的进阶之路。 Vue3 框架:新时代前端开发的基石 Vue3 核心语法探秘 Vue3 作为目前…

Jetpack Compose 常用控件

Jetpack Compose 常用控件一、基础展示控件:呈现静态内容二、交互控件:响应用户操作三、列表与网格控件:展示大量数据四、导航与标签控件:组织页面结构五、反馈控件:提示与加载状态六、布局控件:组织 UI 结…

Android适配最新SplashScreen方案:让启动页不再“翻车“

Android适配最新SplashScreen方案:让启动页不再"翻车" 各位开发者大佬们,最近是不是又被Android的SplashScreen适配搞得焦头烂额?别慌,今天咱们就来聊聊这个让人又爱又恨的启动页适配方案,保证让你笑出腹肌的同时,还能把技术要点牢牢掌握![6][7][9][10] 一、…

【自动驾驶】《Sparse4Dv3》代码学习笔记

这里时间比较有限,优先看Sparse4Dv3方法里面相对以前改动的地方。 0.参考 代码v1/v2/v3:https://github.com/HorizonRobotics/Sparse4D 跑起来:https://github.com/HorizonRobotics/Sparse4D/blob/v3.0/docs/quick_start.md 1.方法 (1&a…

「ECG信号处理——(22)Pan-Tompkins Findpeak 阈值检测 差分阈值算法——三种R波检测算法对比分析」2025年8月8日

目录 1、引言 2、算法原理 (1)Pan-Tompkins 算法(方法1) (2)Findpeak 阈值检测算法(方法2) (3)差分阈值算法(方法3) 3、算法性能…

Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)

在向量搜索中,过滤(Filtering) 是保证结果精准性和业务契合度的关键手段。Qdrant 的过滤机制不仅能在向量相似度检索的基础上叠加结构化条件,还提供了灵活的布尔逻辑组合,让我们可以像写数据库查询一样,精准…

五、RuoYi-Cloud-Plus 前端项目部署以及如何改后端请求地址。

1.前情描述 前面的文章我们介绍了RuoYi-Cloud-Plus的nocos的配置内容,已经启动其他服务要注意什么东西。 专栏内容在这,感兴趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.前端项目部署。 官网地址:plus…

工作量评估

工作量评估 API 工作量评估: 得分 入参个数 * 0.2 业务规则 * 0.5 改动的库表个数 * 0.3 得分(1-2):简单API-5人天 得分(3-8):中等API-8人天 得分(8-15):复…

篮球运动(动态规划)

题目描述小明建造了一个篮球场,他请来了2行n列的人,想让他们进行比赛。每一个人都有一个能力值,第一行分别为h11,h12,…,h1n,第二行为h21,h22,…,h2n。现在小…

区块链与大数据分析技术深度解析

目录 区块链与大数据分析技术深度解析 1. 引言:当区块链遇见大数据 2. 区块链数据特性 2.1 数据结构差异 2.2 区块链数据层级 3. 数据获取技术 3.1 节点直连方案 3.2 链上数据湖架构 4. 数据分析关键技术 4.1 交易图谱分析 4.2 地址聚类算法 5. 链上分析应用场景 5.1 反洗钱(A…

网络基础——网络层级

OSI七层模型OSI七层模型名称功能协议应用层直接为用户应用程序(如浏览器、邮件客户端)提供网络服务接口。HTTP/HTTPS(网页浏览)FTP(文件传输)SMTP/POP3(邮件)DNS(域名解析…

【Redis】hash哈希,List列表

目录 一. hash哈希 1.1.常用命令 1.1.1.HSET 1.1.2.HGET 1.1.3.HEXISTS 1.1.4.HDEL 1.1.5.HKEYS 1.1.6.HVALS 1.1.7.HGETALL 1.1.8.HMGET 1.1.9.HLEN 1.1.10.HSETNX 1.1.11.HINCRBY 1.1.12.HINCRBYFLOAT 1.2. 内部编码 1.3. 使用场景 1.4…

MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)

目录1.分组查询(1)聚合函数(2)group by子句(3)having2.连接查询(1)内连接(笛卡尔积)(2)外连接(3)内外连接的区…

【Python 高频 API 速学 ①】

一、为什么先学它们? 在真实代码里,90 % 的 bug 都源于「拿到的是 A 类型,却当成 B 类型用」。 把「不确定」变成「确定」——这就是类型转换三兄弟的核心价值。二、三兄弟速览函数一句话定位常见输入失败会怎样int(x)把 x 变成整数‘42’, 3…