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に追加するだけです。
それでは。