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 

これは、Windows で実行されていない限り、単に Python の標準の tempfile.NamedTemporaryFile を返します。

tempdir の場所を確認するには、シェルで次のコマンドを実行します。

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

現在、私のシステムでは /var/folders/9v/npjlh_kn7s9fv5p4dwh1spdr0000gn/T が出力されます。これは、一時的にアップロードされたファイルを見つけた場所です。

于 2012-11-27T18:35:47.660 に答える