4

我正在做一些文件验证,并希望将 UploadedFile 加载到外部库中,同时它位于“/tmp”目录中,然后将其保存在可以执行的位置。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”我得到一个AttributeError“类型对象'UploadedFile'没有属性'temporary_file_path'”。如果我改为使用 file.temporary_file_path (在这里只是在黑暗中扔飞镖)我得到一个 IOError:

[Errno 2] 没有这样的文件或目录:'bound method TemporaryUploadedFile.temporary_file_path of >'

我意识到temporary_file_path 是我正在寻找的解决方案,我只是不知道如何使用它,而且在这个特定情况下,文档和谷歌似乎都没有太大帮助。

4

1 回答 1

6

UploadedFile.temporary_file_path

Only files uploaded onto disk will have this method; it returns the full path to the temporary uploaded file.

于 2011-07-09T13:29:51.660 回答