You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask带尾斜杠路由重定向后上传文件丢失,如何解决?

Flask带尾斜杠路由重定向后丢失上传文件问题

问题场景

Flask路由设置为/uploads/,按照官方文档的重定向规则,访问不带尾斜杠的localhost:5000/uploads会自动重定向到带尾斜杠的版本。但实际测试中:

  • 直接访问localhost:5000/uploads/上传文件,视图函数能正常获取并打印文件列表
  • 访问localhost:5000/uploads上传文件,重定向后files变量为空

原代码示例:

@app.route('/uploads/')
def upload_file():
    files = request.files.getlist('files')
    print(files)

解决方案

问题核心是:Flask默认的重定向会将POST请求转为GET请求,导致上传的文件数据丢失。以下是两种可行方案,优先推荐第一种:

方案1:关闭路由的严格尾斜杠检查

给路由添加strict_slashes=False参数,让路由同时匹配带/不带尾斜杠的请求,避免触发重定向,从而保留POST的文件数据:

@app.route('/uploads/', strict_slashes=False)
def upload_file():
    files = request.files.getlist('files')
    print(files)

这样用户访问/uploads或/uploads/都会直接进入视图函数,不会发生重定向,文件数据可以正常获取。

方案2:手动处理POST重定向(不推荐)

如果必须强制用户最终访问带尾斜杠的URL,需要手动暂存文件数据后再重定向:

  1. 给不带尾斜杠的路由单独编写POST处理逻辑,将文件暂存到临时目录或session(注意session存储大小限制)
  2. 重定向到带尾斜杠的路由后,再从暂存位置读取文件
    这种方式复杂度高,且存在数据丢失或性能问题,仅在特殊场景下使用。

内容的提问来源于stack exchange,提问作者Dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:38:17