根据文档,如果文件“相当小”(没有提到上限),Flask 会将上传的文件存储在内存中,否则存储在tempfile.gettempdir().
如何让它将所有文件存储到临时目录?
根据Flask文档,上传文件的处理实际上是由其底层werkzeug WSGI 实用程序库处理的。
根据werkzeug 的文档,获取文件位置的下限temp(正如您提到的“相当小”)是500KB。
如果总内容长度高于 500KB,默认实现会返回临时文件。由于许多浏览器不提供文件的内容长度,因此只有总内容长度很重要。
我们来看看上限。根据上述Flask文档,
默认情况下,Flask 会乐意接受文件上传到无限量的内存,但您可以通过设置配置键来限制
MAX_CONTENT_LENGTH。
例如,这个代码片段
from flask import Flask, Request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
Run Code Online (Sandbox Code Playgroud)
将允许的最大有效负载限制为 16 MB。如果传输较大的文件,Flask 会引发
werkzeug.exceptions.RequestEntityTooLarge异常。
现在,回答你的核心问题
如何让它将所有文件存储到临时目录?
您可以通过重写default_stream_factory()函数来做到这一点:
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+')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5175 次 |
| 最近记录: |