【发布时间】:2018-05-14 00:34:06
【问题描述】:
有没有办法将request.FILES 中的文件视为磁盘文件?我想做这样的事情:
with open(file_in_request, 'rb') as file:
#read data from that file
只是,我不想先将其保存到磁盘。我将加密该文件并将加密的文件保存到磁盘。
【问题讨论】:
有没有办法将request.FILES 中的文件视为磁盘文件?我想做这样的事情:
with open(file_in_request, 'rb') as file:
#read data from that file
只是,我不想先将其保存到磁盘。我将加密该文件并将加密的文件保存到磁盘。
【问题讨论】:
TLDR:通过将FILE_UPLOAD_MAX_MEMORY_SIZE Django 变量修改为足够大的值以将文件保存在内存中。
默认情况下,Django 将大小为 2.5 MB 的文件存储在内存中,大于该大小的文件存储在临时磁盘位置。
这种行为的原因是,将大文件保存在内存中会使您的系统不堪重负。 Read it here in docs.
在您的情况下,如果您知道最大文件大小并且确定它不会大到足以填满您的计算机内存,您可以将阈值 FILE_UPLOAD_MAX_MEMORY_SIZE 变量修改为足够大的值以确保所有文件在内存中。
来自docs:
上传前的最大大小(以字节为单位) 流式传输到文件系统。有关详细信息,请参阅管理文件
【讨论】:
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/…