有一个带有 ImageField 的表单,它返回验证错误
"Upload a valid image. The file you uploaded was either not an image or a corrupted image."
在我看来,我正在尝试读取图像文件内容:
image = self.request.FILES.get('image')
if image:
content = ''.join(image.chunks())
如果我用 image.chunks() 注释行,则不会发生验证错误,如果我从 FILE_UPLOAD_HANDLERS 设置中删除“django.core.files.uploadhandler.MemoryFileUploadHandler”也不会显示。
所以原因可能在 MemoryFileUploadHandler (InMemoryUploadedFile) 创建的文件对象中。
我的猜测是可能是在读取后没有调用 file.seek(0) 将文件读取器指针设置为文件的请求。
它可能是 ImageFile.to_python 假定指针设置为开头。在 ImageField.to_python 我添加了
data.file.seek(0)
前
file = StringIO(data.read())
之后我没有出现图像验证错误。
这是正确的行为吗?或者 ImageField 不应该假设该文件还没有被读取?或者 InMemoryUploadedFile 应该在块迭代器结束其工作后调用 file.seek(0) ?
我的 django 版本是 1.4.3