django在哪里存储临时上传文件?

时间:2012-05-25 16:33:03

标签: django django-uploads

我在CentOS上运行了一个Django / uwsgi / nginx堆栈。将大文件上传到django(1GB +)时,我希望它在/tmp中创建一个临时文件,我应该能够在上传过程中观察它的增长。但是,我没有。 ls -lah /tmp未显示正在创建或更改大小的任何新文件。我甚至在我的settings.py中明确指出FILE_UPLOAD_TEMP_DIR = '/tmp'但仍然没有。

我很感激在追踪临时文件存储位置方面提供帮助。我需要这个来确定是否有任何大型上传正在进行中。

2 个答案:

答案 0 :(得分:5)

它们存储在系统的临时目录中。来自https://docs.djangoproject.com/en/dev/topics/http/file-uploads/?from=olddocs

  

存储上传数据的位置

     

在保存上传的文件之前,需要将数据存储在某处。

     

默认情况下,如果上传的文件小于2.5兆字节,则为Django   将上传的全部内容保存在内存中。这意味着   保存文件只涉及从内存中读取和写入磁盘   因此非常快。

     

但是,如果上传的文件太大,Django会写   将文件上传到存储在系统临时文件中的临时文件   目录。在类似Unix的平台上,这意味着你可以期待Django   生成一个名为/tmp/tmpzfp6I6.upload的文件。如果   上传足够大,你可以看到这个文件的大小增长为Django   将数据流式传输到磁盘上。

     

这些细节 - 2.5兆字节;的/ tmp;等 - 简单地“合理   默认值“。请继续阅读,了解有关如何自定义或完全自定义的详细信息   替换上传行为。

此外,这仅在给定大小后发生,默认为2.5MB

  

FILE_UPLOAD_MAX_MEMORY_SIZE文件的最大大小(以字节为单位)   将被上传到内存中。文件大于   FILE_UPLOAD_MAX_MEMORY_SIZE将流式传输到磁盘。

     

默认为2.5兆字节。

答案 1 :(得分:4)

我刚刚使用Django 1.4.1在我的OS X系统上跟踪了这一点。

在django / core / files / uploadedfile.py中,使用django.core.files.temp创建一个临时文件,导入为tempfile

from django.core.files import temp as tempfile 

这只是返回Python的标准tempfile.NamedTemporaryFile,除非它在Windows上运行。

要查看tempdir的位置,可以在shell上运行此命令:

python -c "import tempfile; print tempfile.gettempdir()"

现在我的系统输出/ var / folders / 9v / npjlh_kn7s9fv5p4dwh1spdr0000gn / T,这是我找到临时上传文件的地方。