微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

告诉 Flask 只在内存中存储上传而不使用临时文件

如何解决告诉 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 举报,一经查实,本站将立刻删除。