【问题标题】:How to open and read file from request.FILES without saving it to disk如何从 request.FILES 打开和读取文件而不将其保存到磁盘
【发布时间】:2018-05-14 00:34:06
【问题描述】:

有没有办法将request.FILES 中的文件视为磁盘文件?我想做这样的事情:

with open(file_in_request, 'rb') as file:
        #read data from that file

只是,我不想先将其保存到磁盘。我将加密该文件并将加密的文件保存到磁盘。

【问题讨论】:

    标签: python django


    【解决方案1】:

    TLDR:通过将FILE_UPLOAD_MAX_MEMORY_SIZE Django 变量修改为足够大的值以将文件保存在内存中。


    默认情况下,Django 将大小为 2.5 MB 的文件存储在内存中,大于该大小的文件存储在临时磁盘位置。

    这种行为的原因是,将大文件保存在内存中会使您的系统不堪重负。 Read it here in docs.

    在您的情况下,如果您知道最大文件大小并且确定它不会大到足以填满您的计算机内存,您可以将阈值 FILE_UPLOAD_MAX_MEMORY_SIZE 变量修改为足够大的值以确保所有文件在内存中。

    来自docs

    上传前的最大大小(以字节为单位) 流式传输到文件系统。有关详细信息,请参阅管理文件

    【讨论】:

    • 我真的不介意 Django 在哪里以及如何存储不同大小的文件。我只是不想将它保存到磁盘以便能够读取它。我要做的就是读取文件,加密,保存加密后的文件,希望Django以后会丢弃InMemory文件。
    • @TahreemIqbal 这就是你的答案。将 FILE_UPLOAD_MAX_MEMORY_SIZE 变量修改为 10GB
    • 我在settings.py 中添加了这些行:FILE_UPLOAD_MAX_MEMORY_SIZE = 1000 * 1000 * 1000, DATA_UPLOAD_MAX_MEMORY_SIZE = 1000 * 1000 * 1000 仍然出现异常TypeError: invalid file: <InMemoryUploadedFile: upoad.csv (application/vnd.ms-excel)>
    • 在线发生异常:with open(source, 'rb') as file: 其中源是request.FILES 中的文件。
    • 您没有打开已经打开的上传文件,您可以通过paramFile = request.FILES['uploadFile'].read()阅读它,请参阅stackoverflow.com/questions/10617286/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2018-08-31
    • 1970-01-01
    • 2010-10-26
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多