Как я могу получить временное имя загруженного файла в Django? - PullRequest
4 голосов
/ 09 июля 2011

Я делаю некоторую проверку файла и хочу загрузить UploadedFile во внешнюю библиотеку, пока она находится в каталоге '/ tmp', прежде чем я сохраню его где-нибудь, чтобы он мог быть выполнен. Джанго делает следующее:

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.51024:
                    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», я получаю объект типа «AttributeError». UploadedFile не имеет атрибута «virtual_file_path». Если я вместо этого использую file.teven_file_path (просто бросая дротики в темноте), я получаю IOError:

[Errno 2] Нет такого файла или каталога: 'связанный метод TemporaryUploadedFile.teilitary_file_path из>'

*1024*

Я понимаю, что временное_файл_путь - это решение, которое я ищу, я просто не могу понять, как его использовать, и ни документы, ни Google не кажутся мне особенно полезными в этом конкретном случае.

1 Ответ

6 голосов
/ 09 июля 2011

UploadedFile.temporary_file_path

Этот метод доступен только для файлов, загруженных на диск; возвращает полный путь к временно загруженному файлу.

...