如何在Django中获取UploadedFile的临时名称?

Mat*_*lla 4 django django-validation django-file-upload

我正在进行一些文件验证,并希望将UploadedFile加载到外部库中,而它位于'/ tmp'目录中,然后将其保存到可以执行的地方.Django执行以下操作:

Django会将上传的文件写入存储在系统临时目录中的临时文件中.在类似Unix的平台上,这意味着你可以期待Django生成一个名为/ tmp/tmpzfp6I6.upload的文件.

它IHE"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 
Run Code Online (Sandbox Code Playgroud)

使用"UploadedFile"我得到一个AttributeError"类型对象''UploadedFile'没有属性'temporary_file_path'".如果我改为使用file.temporary_file_path(这里只是在黑暗中投掷飞镖),我得到一个IOError:

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

我发现temporary_file_path是我正在寻找的解决方案,我只是无法弄清楚如何使用它,在这个特定的实例中,docs和google似乎都没有多大帮助.

rze*_*erg 6

UploadedFile.temporary_file_path

只有上传到磁盘上的文件才会有这种方法; 它返回临时上传文件的完整路径.

  • 注意,这似乎仅在您上传的文件足够大以“写入”到临时目录时才有效。如果它太小,据我了解,该文件将保存在内存中,因此,不存在文件路径,因为该文件不在文件系统上。 (2认同)