
1. 项目背景与需求分析最近在帮朋友解决一个工厂质检部门的实际需求他们每天需要收集大量产品照片和视频作为质检记录但当前流程存在几个痛点质检员用手机拍摄后需要通过微信或U盘手动传输到电脑文件命名不规范经常出现重复或混淆原始媒体文件体积大长期存储占用空间缺乏统一管理后期追溯困难这个Python项目就是要开发一个局域网内的文件收集系统主要实现通过网页端上传照片/视频自动按规则重命名文件实时压缩存储支持按批次打包下载2. 技术方案设计2.1 整体架构采用B/S架构服务端使用Flask框架主要组件包括graph TD A[前端页面] --|HTTP| B(Flask服务端) B -- C[SQLite数据库] B -- D[文件存储] D -- E[压缩打包]2.2 技术选型理由Flask框架轻量灵活适合小型Web应用开发SQLAlchemy提供ORM支持便于数据管理Pillow处理图像压缩MoviePy视频压缩处理zipfile标准库实现打包功能注意生产环境建议使用MySQL替代SQLite本文为演示使用SQLite3. 核心功能实现3.1 文件上传模块from flask import Flask, request, redirect from werkzeug.utils import secure_filename import os app Flask(__name__) app.config[UPLOAD_FOLDER] uploads app.config[ALLOWED_EXTENSIONS] {png, jpg, jpeg, mp4} def allowed_file(filename): return . in filename and \ filename.rsplit(., 1)[1].lower() in app.config[ALLOWED_EXTENSIONS] app.route(/upload, methods[POST]) def upload_file(): if file not in request.files: return redirect(request.url) file request.files[file] if file.filename : return redirect(request.url) if file and allowed_file(file.filename): filename secure_filename(file.filename) file.save(os.path.join(app.config[UPLOAD_FOLDER], filename)) return 上传成功3.2 文件压缩处理图片压缩实现from PIL import Image import os def compress_image(input_path, output_path, quality85): try: img Image.open(input_path) if img.mode ! RGB: img img.convert(RGB) img.save(output_path, JPEG, qualityquality) return True except Exception as e: print(f压缩失败: {e}) return False视频压缩实现from moviepy.editor import VideoFileClip def compress_video(input_path, output_path, bitrate1000k): try: video VideoFileClip(input_path) video.write_videofile(output_path, bitratebitrate) return True except Exception as e: print(f视频压缩失败: {e}) return False3.3 数据库设计使用SQLAlchemy定义数据模型from flask_sqlalchemy import SQLAlchemy db SQLAlchemy() class QualityFile(db.Model): id db.Column(db.Integer, primary_keyTrue) original_name db.Column(db.String(200)) stored_name db.Column(db.String(200)) file_type db.Column(db.String(10)) file_size db.Column(db.Integer) compressed_size db.Column(db.Integer) upload_time db.Column(db.DateTime) batch_id db.Column(db.String(50))4. 系统部署与使用4.1 环境配置安装依赖pip install flask flask-sqlalchemy pillow moviepy初始化数据库from app import db db.create_all()4.2 局域网访问配置修改Flask启动配置if __name__ __main__: app.run(host0.0.0.0, port5000)然后同一局域网内的设备都可以通过http://[服务器IP]:5000访问系统。5. 实用技巧与问题排查5.1 性能优化建议使用Celery实现异步压缩任务对大文件采用分块上传启用Gzip压缩传输5.2 常见问题解决问题1上传大文件超时解决方案调整Flask配置app.config[MAX_CONTENT_LENGTH] 100 * 1024 * 1024 # 100MB限制问题2视频压缩速度慢优化方案降低分辨率或使用硬件加速video video.resize(height480) # 调整为480p问题3局域网设备无法访问检查步骤确认服务器防火墙放行5000端口确保客户端和服务器在同一子网尝试关闭服务器杀毒软件测试6. 扩展功能建议添加用户权限管理实现自动备份到NAS开发移动端适配界面添加文件水印功能集成条形码扫描关联这个系统在实际工厂环境中运行稳定日均处理文件约300个压缩率可达60%大大减轻了质检部门的工作负担。对于有类似需求的场景可以根据实际情况调整压缩参数和存储策略。