【问题标题】:Tell Flask to only store uploads in memory and not to use temporary files告诉 Flask 仅将上传内容存储在内存中,而不使用临时文件
【发布时间】:2021-01-21 19:31:50
【问题描述】:

我正在尝试在接收文件时绕过任何本地存储。根据documentation,如果“合理”,Flask 会将文件保存在内存中,否则将它们存储在临时位置。

我只找到了一种通常使用MAX_CONTENT_LENGTH 来限制请求大小的方法。如何控制单个文件大小的阈值,或完全禁止使用临时文件?

【问题讨论】:

    标签: python flask werkzeug


    【解决方案1】:

    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)来更改内存阈值。

    内存是比磁盘空间更有限的共享资源,因此将所有内容存储在内存中通常不是一个好主意。没有理由不使用临时文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2012-09-18
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多