2.5MB以下のファイルは一時保存されない

Djangoで音声ファイルをフロントからアップロードさせた時の話ですが、一時的にシステム内に保存させたいのに2.5MB以下のファイルはメモリー上に置かれて入る自体は保存されないということがありました。

Djangoの使用上、デフォルトだと2.5MB以下のファイルはdjango.core.files.uploadedfile.InMemoryUploadedFileとしてメモリー上に保存されて、2.5MB以上だとdjango.core.files.uploadedfile.TemporaryUploadedFileとして一旦保存されるようです。

django.core.files.uploadedfile.TemporaryUploadedFileとして保存されるなら、temporary_file_path()を使ってかんたんに一時保存されるパスを取得できるのですが、django.core.files.uploadedfile.InMemoryUploadedFileだと一度保存しないとパスを取得することができません。

file = request.FILES['file']
print(file.temporary_file_path())

django.core.files.uploadedfile.TemporaryUploadedFileなら上のようにかんたんにパスを取得できるのですが、

django.core.files.uploadedfile.InMemoryUploadedFileだと怒られます。

一度、ファイルとして保存する方法があるようですが、それは面倒だし、用無しになったら勝手に削除されてほしいのdjango.core.files.uploadedfile.TemporaryUploadedFileのほうが都合がいいんですよね。

ということで、なにかいい方法はないか調べていたら、setting.pyをいじって解決する方法がありました。

FILE_UPLOAD_HANDLERS = [
'django.core.files.uploadhandler.TemporaryFileUploadHandler', ]

こちらをsetting.pyに追加するだけです。

 

それでは。