我在CentOS上运行了一个Django / uwsgi / nginx堆栈。将大文件上传到django(1GB +)时,我希望它在/tmp
中创建一个临时文件,我应该能够在上传过程中观察它的增长。但是,我没有。 ls -lah /tmp
未显示正在创建或更改大小的任何新文件。我甚至在我的settings.py
中明确指出FILE_UPLOAD_TEMP_DIR = '/tmp'
但仍然没有。
我很感激在追踪临时文件存储位置方面提供帮助。我需要这个来确定是否有任何大型上传正在进行中。
答案 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,这是我找到临时上传文件的地方。