根据docs,Flask将上传的文件存储在内存中,如果文件“相当小”(没有提到上限),则存储在tempfile.gettempdir()
返回的临时位置。
如何将所有文件存储到临时目录?
答案 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+')