Python 使用Flask上载拒绝超过一定数量的文件?

Python 使用Flask上载拒绝超过一定数量的文件?,python,file-upload,flask,flask-uploads,Python,File Upload,Flask,Flask Uploads,Flask建议使用Flask上载模块来处理上载。我想拒绝任何超过一定大小的文件。有几种解决方案: : 此外,您还可以使用patch_request_类对应用程序的request_类进行修补,使其具有最大上载大小 : MAX_CONTENT_LENGTH是拒绝文件上载的正确方法,文件上载的大小超出了您的需要 -或 我没有看到官方文档中提到的MAX\u CONTENT\u LENGTH,也没有像帖子那样手动检查文件大小。这两种方法最终是相同的,还是存在(大/小)差异?另外,patch\u reque

Flask建议使用Flask上载模块来处理上载。我想拒绝任何超过一定大小的文件。有几种解决方案:

:

此外,您还可以使用patch_request_类对应用程序的request_类进行修补,使其具有最大上载大小

:

MAX_CONTENT_LENGTH是拒绝文件上载的正确方法,文件上载的大小超出了您的需要

-或


我没有看到官方文档中提到的
MAX\u CONTENT\u LENGTH
,也没有像帖子那样手动检查文件大小。这两种方法最终是相同的,还是存在(大/小)差异?另外,
patch\u request\u class
是先将文件保存到磁盘以确定总上载大小,还是将其保存到内存?

MAX\u CONTENT\u LENGTH
是0.6版中引入的烧瓶本身的配置项

默认情况下,Flask将愉快地接受文件上传到无限制的服务器 内存量,但您可以通过设置 最大内容长度配置键:

from flask import Flask, Request

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
上述代码将最大允许有效负载限制为16 兆字节。如果传输较大的文件,Flask将引发 RequestEntityTooLarge异常

此功能添加到烧瓶0.6中,但可以在较旧的烧瓶中实现 通过对请求对象进行子类化,也可以创建版本。更多 有关这方面的信息,请查阅Werkzeug文件 处理

并从烧瓶上传源:

因此,我要说的是:

app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024

patch\u request\u class
只是为了向后兼容

从Flask 0.6开始,您应该使用
app.config['MAX\u CONTENT\u LENGTH']


我最近接手了Flask Uploads项目的维护工作,我做的第一件事就是在中删除
patch\u request\u类
,因为它只会给新项目增加混乱。任何依赖它的旧项目都应该在它们的
requirements.txt
文件中锁定
Flask Uploads==0.1.3

所以
patch\u request\u class
只是为了向后兼容?你已经接受了!检查大小限制。垃圾带。
# save to memory, then check filesize
blob = request.files['file'].read()
size = len(blob)
from flask import Flask, Request

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
def patch_request_class(app, size=64 * 1024 * 1024):
    """
    By default, Flask will accept uploads to an arbitrary size. While Werkzeug
    switches uploads from memory to a temporary file when they hit 500 KiB,
    it's still possible for someone to overload your disk space with a
    gigantic file.

    This patches the app's request class's
    `~werkzeug.BaseRequest.max_content_length` attribute so that any upload
    larger than the given size is rejected with an HTTP error.

    .. note::

       In Flask 0.6, you can do this by setting the `MAX_CONTENT_LENGTH`
       setting, without patching the request class. To emulate this behavior,
       you can pass `None` as the size (you must pass it explicitly). That is
       the best way to call this function, as it won't break the Flask 0.6
       functionality if it exists.

    .. versionchanged:: 0.1.1

    :param app: The app to patch the request class of.
    :param size: The maximum size to accept, in bytes. The default is 64 MiB.
                 If it is `None`, the app's `MAX_CONTENT_LENGTH` configuration
                 setting will be used to patch.
    """
    if size is None:
        if isinstance(app.request_class.__dict__['max_content_length'],
                      property):
            return
        size = app.config.get('MAX_CONTENT_LENGTH')
    reqclass = app.request_class
    patched = type(reqclass.__name__, (reqclass,),
                   {'max_content_length': size})
    app.request_class = patched
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024