如何解决告诉 Flask 只在内存中存储上传而不使用临时文件
我正在尝试在接收文件时绕过任何本地存储。根据{{3}},如果“合理”,Flask 会将文件保存在内存中,否则会将它们存储在临时位置。
我只找到了一种使用 MAX_CONTENT_LENGTH
来限制请求大小的方法。如何控制单个文件大小的阈值,或者完全禁止使用临时文件?
解决方法
Request._get_file_stream
方法用于获取用于存储文件上传的类文件对象。默认实现使用 SpooledTemporaryFile
,限制为 500 KiB,在写入常规临时文件之前将数据保存在内存中。
子类化并覆盖方法以始终返回 BytesIO
。告诉 Flask 应用使用该类而不是默认类。
from flask.wrappers import Request
class MemoryRequest(Request):
def _get_file_stream(self,total_content_length,content_type,filename,content_length):
return BytesIO()
app.request_class = MemoryRequest
您还可以通过返回 SpooledTemporaryFile(max_size=100_000_000,mode="rb+")
(例如 100 MB)来更改内存阈值。
内存是比磁盘空间更有限的共享资源,因此将所有内容存储在内存中通常不是一个好主意。没有理由不使用临时文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。