如何在Django中获取上载文件的临时名称?
我正在进行一些文件验证,希望在将上载的文件保存到某个可以执行的位置之前,将其加载到“/tmp”目录下的外部库中。Django做了以下工作: Django将上传的文件写入存储在系统临时目录中的临时文件。在类Unix平台上,这意味着您可以期望Django生成一个名为/tmp/tmpzfp6I6.upload的文件 我希望能够接触到的是“tmpzfp616.upload”。UploadedFile.name给了我“”而file.name给了我文件的正确名称“example.mp3” 对于我正在使用的库,我需要将临时文件的文件路径传递给库,而不是文件本身,因此需要字符串 有什么想法吗 提前谢谢 编辑:这是我的代码:如何在Django中获取上载文件的临时名称?,django,django-validation,django-file-upload,Django,Django Validation,Django File Upload,我正在进行一些文件验证,希望在将上载的文件保存到某个可以执行的位置之前,将其加载到“/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’没有属性‘临时文件路径’。如果我改为使用file.temporary文件路径(这里只是在黑暗中投掷省道),我会得到一个IOError:
[Errno 2]没有这样的文件或目录:'bind method TemporaryUploadedFile.temporary\u file\u path of>'
我意识到临时文件路径是我正在寻找的解决方案,我只是不知道如何使用它,在这个特殊的例子中,文档和谷歌似乎都没有多大帮助。
只有上传到磁盘上的文件才会使用此方法;它返回临时上传文件的完整路径
我在文档中看到了这一点,但我无法使其正常工作…我将在上面添加我的代码。谢谢您需要访问
上载文件
实例上的临时文件路径方法。如果您的实例是名称文件,则访问路径如下:文件。临时文件路径()
.N.B.这似乎只有在上载的文件足够大,可以写入临时目录时才起作用。据我所知,如果文件太小,文件将保留在内存中,因此,不存在文件路径,因为文件不在文件系统中。