Flask如何配置多上传路径 实现文件数量达标后自动切换存储位置
问题根源
- 核心问题是
count变量定义在视图函数内部,每次收到请求都会被重置为0,所以永远满足count < 3的条件,不会触发路径切换逻辑 - 逻辑结构不合理:请求方法的判断应该放在最外层,避免重复写两次POST判断
- 分支内的文件参数名错误:else分支取
file2,如果前端上传表单只有一个file1字段的话,此处会直接抛出获取不到文件的错误 - 计数没有持久化存储:如果服务重启、多进程部署,内存中的计数会丢失,阈值判断会失效
修复代码(本地模拟场景用)
# 把计数变量放到视图函数外部,作为全局变量存储 count = 0 @application.route("/uploader" , methods=['GET', 'POST']) def uploader(): global count if request.method == 'POST': f = request.files['file1'] filename = secure_filename(f.filename) if count < 3: save_path = os.path.join(application.config['UPLOAD_FOLDER1'], filename) count += 1 else: save_path = os.path.join(application.config['UPLOAD_FOLDER2'], filename) f.save(save_path) return "Uploaded successfully!" # 处理GET请求,返回上传表单,不需要可以直接删除 return ''' <form method="POST" enctype="multipart/form-data"> <input type="file" name="file1"> <input type="submit" value="上传"> </form> '''
生产环境适配说明
如果不是本地临时模拟,需要长期稳定运行,建议把计数存在独立的持久化存储中,比如Redis、本地文件、数据库,避免多进程、服务重启导致计数失效:
- 可以每次上传后直接查询对应存储目录下的文件数量,和阈值做比对,这样即使服务重启也能准确判断
- 真实磁盘占满的场景,可以同时校验磁盘剩余空间,超出阈值后自动切换存储路径
内容的提问来源于stack exchange,提问作者sandy77
相关产品推荐
相关产品推荐

