我试图捕获一个与表单一起发送的文件,并在保存之前对其执行一些操作.所以我需要在临时目录中创建此文件的副本,但我不知道如何到达它.Shutil的功能无法复制此文件,因为没有路径.那么有没有办法以其他方式进行此操作?
我的代码:
image = form.cleaned_data['image']
temp = os.path.join(settings.PROJECT_PATH, 'tmp')
sourceFile = image.name # without .name here it wasn't working either
import shutil
shutil.copy(sourceFile, temp)
Run Code Online (Sandbox Code Playgroud)
哪个提出:
Exception Type: IOError at /
Exception Value: (2, 'No such file or directory')
调试:
# (..)\views.py in function
67. sourceFile = image.name
68. import shutil
69. shutil.copy2(sourceFile, temp) ...
# (..)\Python26\lib\shutil.py in copy2
92. """Copy data and all stat info ("cp -p src dst").
93.
94. The destination may be a directory.
95.
96. """ …Run Code Online (Sandbox Code Playgroud) 我有一个这样的模型:
class Talk(BaseModel):
title = models.CharField(max_length=200)
mp3 = models.FileField(upload_to = u'talks/', max_length=200)
seconds = models.IntegerField(blank = True, null = True)
Run Code Online (Sandbox Code Playgroud)
我想在保存之前验证上传的文件是MP3,如下所示:
def is_mp3(path_to_file):
from mutagen.mp3 import MP3
audio = MP3(path_to_file)
return not audio.info.sketchy
Run Code Online (Sandbox Code Playgroud)
一旦我确定我有一个MP3,我想在seconds属性中保存通话的长度,如下所示:
audio = MP3(path_to_file)
self.seconds = audio.info.length
Run Code Online (Sandbox Code Playgroud)
问题是,在保存之前,上传的文件没有路径(请参阅此票证,关闭为wontfix),因此我无法处理MP3.
我想提出一个很好的验证错误,以便ModelForms可以显示一个有用的错误("你这个白痴,你没有上传MP3"或其他东西).
知道如何在保存文件之前访问该文件吗?
ps如果有人知道验证文件的更好方法是MP3,我会全神贯注 - 我也希望能够搞乱ID3数据(设置艺术家,专辑,标题和专辑艺术,所以我需要它可以处理通过mutagen).