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

Flask上传超500KB文件时request.files为空,该如何解决?

解决Flask大文件上传时request.files为空的问题

问题根源是Flask依赖的Werkzeug默认限制请求体大小为500KB,超过该值的请求会被直接拒绝,导致request.files返回空。以下是具体解决方案:

1. 配置最大上传文件大小

在Flask应用初始化时,设置MAX_CONTENT_LENGTH参数,指定允许的最大文件大小(单位:字节)。根据你的图像识别需求调整数值,比如设置为16MB:

from flask import Flask

app = Flask(__name__)
# 允许最大16MB的文件上传,可根据实际需求修改
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024

2. 自定义超大文件错误响应

当文件大小超过限制时,Flask会返回413状态码,默认返回HTML页面,你可以自定义返回JSON格式的友好提示:

@app.errorhandler(413)
def request_entity_too_large(error):
    return make_response(jsonify(status=413, message='文件大小超出限制(最大16MB)'), 413)

3. 优化控制器代码

增加文件存在性检查,避免因超大文件导致file为None时抛出异常,同时确保存储目录存在:

from flask import request, jsonify, make_response
import os

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in {'png', 'jpg', 'jpeg'}

def store_report():
    try:
        file = request.files.get('file')
        # 检查文件是否存在(超大文件上传时会为空)
        if not file:
            return make_response(jsonify(status=400, message='未上传文件或文件大小超出限制'), 400)
            
        upload_path = './storage/'
        # 确保存储目录存在,不存在则自动创建
        os.makedirs(upload_path, exist_ok=True)

        if allowed_file(file.filename):
            file.save(os.path.join(upload_path, file.filename))
            return make_response(jsonify(status=200, message='上传成功'), 200)
        else:
            return make_response(jsonify(status=400, message='文件格式必须为png、jpg或jpeg'), 400)

    except Exception as e:
        return make_response(jsonify(message="文件存储失败", status=400), 400)

进阶方案:分块上传(针对GB级大文件)

如果需要支持几百MB甚至GB级的超大文件,单请求上传会受限于服务器和网络,建议采用分块上传:

  • 前端将文件分割为多个固定大小的块(比如10MB/块)
  • 后端逐个接收块,存储到临时目录
  • 所有块上传完成后,后端将块拼接为完整文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:20:19