烧瓶:上传大于限制的文件时重置连接

时间:2018-09-20 18:41:05

标签: jquery flask flask-wtforms

我遇到了一个问题,如果用户的上传文件超过文件大小,浏览器将重置(ERR_CONNECTION_RESET)。结果,当用户尝试上传超出最大限制的文件时,我尝试实施一些验证。我设置了通过

上传文件的最大限制
class Config(object):
    """Base configuration."""

    # App
    MAX_CONTENT_LENGTH = 64 * 1024 * 1024

这是我的异常处理程序。由于http://flask.pocoo.org/docs/1.0/patterns/fileuploads/#improving-uploads超出了MAX_CONTENT_LENGTH,我预计会出现413错误,但是重置了连接,而不是返回错误。还尝试了render_template,并返回413.html,但是连接再次被重置。在提交表单时,如果用户尝试上传超过最大长度的文件,则浏览器将重置连接,而不是正常失败。控制台,终端等没有可用于调试的错误。这只是一个白色屏幕,显示“ ERR CONNECTION RESET”(ERR连接重设),不表示出了什么问题。

@app.errorhandler(413)
def request_entity_too_large(error):
    return 'File(s) exceed 64MB', 413

客户端验证:我有6个FileField,因此我使用循环来获取每个文件的大小,并将它们加在一起以检查6个FileField的总大小是否超过64 MB。

var fileSizeTotal = 0;
var files = $('input[type=file]');
for (i = 0; i < files.length; i++) {
    var fileSizes = files[i].files[0].size;
    fileSizeTotal + fileSizes;
}

if (fileSizeTotal > 67108864) {
    $("file_error").html("Exceeded file size limit");
        $("upload").css("border-color", "FF0000");
        return false;
}

我知道此问题可能与Flask的开发服务器有关,因此我在Heroku的暂存环境中运行了该问题,但仍然重置了连接。超出文件大小限制不应重置连接,而是将页面空白。理想情况下,它应该呈现/重新加载页面(带有错误消息除外)。目的是计算所有FileField的文件大小,并使用该数据创建检查以确保仅提交文件大小限制内的文件。如果超出文件大小限制,则应通过不提交表单,返回错误消息以及绝对不要导致空白页的方式来妥善处理。

0 个答案:

没有答案