Flask文件上传限制

时间:2013-11-11 16:24:07

标签: python file-upload flask http-status-code-413

我有一个用于多个文件上传的文件上传处理程序,并设置了MAX_CONTENT_SIZE。文档提到当文件总大小超过限制时,Flask会抛出413异常,因此我还编写了一个带有自定义413页面的413错误处理程序。但是,在测试文件上传时,我可以看到413错误肯定会被抛出,但连接似乎每次都会中断,而不是渲染我的错误页面。仅供参考,我目前正在使用Flask开发服务器。

代码:

app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024    # 50 Mb limit

@app.route('/upload', methods=['POST'])
def upload_files():
    if request.method == 'POST':
       uploaded_files = request.files.getlist('uploaded_files[]')

       # do some stuff with these files



@app.errorhandler(413)
def error413(e):
    return render_template('413.html'), 413

更新:

好奇怪,这个问题似乎只在使用Flask开发服务器时才会发生。我在Apache上测试它,我的413错误页面渲染得很好。

1 个答案:

答案 0 :(得分:0)

使用生产 WSGI 服务器将解决此问题(例如 GunicornWaitress)。以下是此问题的简单时间表。

2015

在 Armin Ronacher 发布的 this snippet (gone) 中,他说:

<块引用>

您可能会注意到,如果在传入的 POST 请求中开始不访问 .form 或 .files,某些浏览器会通过连接重置消息来实现这一点。如果您开始拒绝大于给定大小的上传,就会发生这种情况。

有些 WSGI 服务器可以为您解决这个问题,有些则不能。例如,内置的 Flask 网络服务器非常愚蠢,不会尝试解决这个问题。

2018

我在 Flask 的文件上传文档 (flask #2662) 中添加了一个提示:

<块引用>

连接重置问题

使用本地开发服务器时,您可能会收到连接重置错误而不是 413 响应。使用生产 WSGI 服务器运行应用程序时,您将获得正确的状态响应。

2021

我认为/希望它会在不久的将来 (werkzeug #1513) 在 Werkzeug 得到修复。