7

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

在追踪临时文件的存储位置方面,我将不胜感激。我需要这个来确定是否有任何大型上传正在进行中。

4

2 回答 2

6

它们存储在系统的临时目录中。来自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 兆字节。

于 2012-05-25T16:46:34.430 回答
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,这是我找到临时上传文件的地方。

于 2012-11-27T18:35:47.660 回答