在Flask结果连接重置中上传大于MAX_CONTENT_LENGTH的文件

时间:2015-05-23 15:53:15

标签: browser flask

我试图限制上传文件的大小,我将app.config [' MAX_CONTENT_LENGTH']设置为我想要的最大值,

我使用此代码显示错误。

@app.errorhandler(413)
def request_entity_too_large(error):
    return 'File Too Large', 413

使用curl时,错误显示正确。 我使用Firefox / Safari进行了检查,我发现浏览器连接丢失/重置错误。

火狐

The connection was reset

The connection to the server was reset while the page was loading.

    The site could be temporarily unavailable or too busy. Try again in a few moments.
    If you are unable to load any pages, check your computer's network connection.
    If your computer or network is protected by a firewall or proxy, make sure that Firefox is permitted to access the Web.

Safari浏览器

Can't open the page
...server unexpectedly dropped the connection...

服务器登录所有这些请求

192.168.1.1 - - [23/May/2015 15:50:34] "POST / HTTP/1.1" 413 -

为什么错误没有正确显示?

2 个答案:

答案 0 :(得分:1)

这是与Flask的开发服务器相关的问题,您无需担心。使用生产服务器运行应用程序将解决此问题。

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

  

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

     

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

答案 1 :(得分:0)

李瑞(Grey Li)的答案解释了问题发生的原因。

但是我们仍然可以通过处理程序RequestEntityTooLarge对其进行修复,该处理程序由werkzeug在Flask中的abort(413)之前引发。

from werkzeug.exceptions import RequestEntityTooLarge

@app.errorhandler(413)
@app.errorhandler(RequestEntityTooLarge)
def app_handle_413(e):
    return 'File Too Large', 413