Python Flask - 使所有文件上传到tmp目录

时间:2015-08-17 18:58:49

标签: python flask

根据docs,Flask将上传的文件存储在内存中,如果文件“相当小”(没有提到上限),则存储在tempfile.gettempdir()返回的临时位置。

如何将所有文件存储到临时目录?

1 个答案:

答案 0 :(得分:3)

根据Flask doc,上传文件的处理实际上是由其基础werkzeug WSGI实用程序库处理的。

根据werkzeug's documentation,获取文件temp位置的下限(正如您所说的“相当小”)为500KB

  

如果总内容长度高于500KB,则默认实现返回临时文件。由于许多浏览器不提供文件的内容长度,因此只需要总内容长度。

让我们看一下上限。根据{{​​3}},

  

默认情况下,Flask会乐意接受文件上传到无限量的内存,但您可以通过设置MAX_CONTENT_LENGTH配置密钥来限制。

例如,此代码片段

from flask import Flask, Request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
  

将最大允许的有效负载限制为16兆字节。如果传输的文件较大,Flask将引发werkzeug.exceptions.RequestEntityTooLarge例外。

现在,回答您的核心问题

  

如何将所有文件存储到临时目录?

您可以通过覆盖aforementioned Flask doc函数来实现此目的:

def default_stream_factory(total_content_length, filename, content_type, content_length=None):
    """The stream factory that is used per default."""
    # if total_content_length > 1024 * 500:
    #    return TemporaryFile('wb+')
    # return BytesIO()
    return TemporaryFile('wb+')