私はいくつかのファイル検証を行っており、UploadedFile を実行できる場所に保存する前に、「/tmp」ディレクトリにある間に UploadedFile を外部ライブラリにロードしたいと考えています。Django は次のことを行います。
Django は、アップロードされたファイルをシステムの一時ディレクトリに保存されている一時ファイルに書き込みます。Unix ライクなプラットフォームでは、これは Django が /tmp/ tmpzfp6I6.uploadのような名前のファイルを生成することを期待できることを意味します。
手に入れたいのは「tmpzfp616.upload」です。 UploadedFile.name は「」を与え、file.name はファイルの適切な名前「example.mp3」を与えます。
私が使用しているライブラリでは、ファイル自体ではなく一時ファイルのファイルパスをライブラリに渡す必要があるため、文字列が必要です。
何か案は?
前もって感謝します。
編集:これが私のコードです:
from django.core.files.uploadedfile import UploadedFile
class SongForm(forms.ModelForm):
def clean_audio_file(self):
file = self.cleaned_data.get('audio_file',False)
if file:
[...]
if file._size > 2.5*1024*1024:
try:
#The following two lines are where I'm having trouble, MP3 takes the path to file as input.
path = UploadedFile.temporary_file_path
audio = MP3('%s' %path)
except HeaderNotFoundError:
raise forms.ValidationError("Cannot read file")
else:
raise forms.ValidationError("Couldn't read uploaded file")
return file
「UploadedFile」を使用すると、「タイプ オブジェクト 'UploadedFile' には属性 'temporary_file_path' がありません」という AttributeError が表示されます。代わりに file.temporary_file_path を使用すると (ここで暗闇の中でダーツを投げるだけです)、IOError が発生します。
[Errno 2] そのようなファイルまたはディレクトリはありません: 'bound method TemporaryUploadedFile.temporary_file_path of >'
私はtemporary_file_pathが私が探している解決策であることを認識しています.