Django给出了;关闭文件上的I/O操作“;从保存的图像字段读取时出错
我有一个模型,有两个图像字段,一个源图像和一个缩略图 当我更新新的源图像时,保存它,然后尝试读取源图像以将其裁剪/缩放为缩略图,我从PIL中得到“关闭文件上的I/O操作”错误 如果我更新源图像,不保存源图像,然后尝试将源图像读取到裁剪/缩放,则PIL会出现“尝试从关闭的文件读取”错误 在这两种情况下,源映像实际上已保存,并可在以后的请求/响应循环中使用 如果我不在一个请求/响应循环中裁剪/缩放,而是在一个页面上上传,然后在另一个页面上裁剪/缩放,这一切都很好 这似乎是一个缓存缓冲区,通过PIL或Django文件存储以某种方式被重用。如何在保存后使ImageField可读Django给出了;关闭文件上的I/O操作“;从保存的图像字段读取时出错,django,django-models,Django,Django Models,我有一个模型,有两个图像字段,一个源图像和一个缩略图 当我更新新的源图像时,保存它,然后尝试读取源图像以将其裁剪/缩放为缩略图,我从PIL中得到“关闭文件上的I/O操作”错误 如果我更新源图像,不保存源图像,然后尝试将源图像读取到裁剪/缩放,则PIL会出现“尝试从关闭的文件读取”错误 在这两种情况下,源映像实际上已保存,并可在以后的请求/响应循环中使用 如果我不在一个请求/响应循环中裁剪/缩放,而是在一个页面上上传,然后在另一个页面上裁剪/缩放,这一切都很好 这似乎是一个缓存缓冲区,通过PIL或
更多信息。。。ImageField在保存后显然正在关闭基础文件。有没有办法强制刷新ImageField?我看到一些人在使用seek(0),但在这种情况下,这将不起作用。在ImageField中有一个bug,我已经跟踪并验证了它 如果您有一个带有ImageField?的简单模型,则以下代码将因“关闭文件上的I/O操作”而失败: 解决方法是重新打开文件:
instance = MyClass.objects.get(...)
w = instance.image.width
h = instance.image.height
instance.image.open()
original = Image.open(instance.image)
如果其他人像我一样好奇,上面引用的图像是PIL的图像-来自PIL导入图像“imageField.open()不会更改文件的内容,但会重置指针”
instance = MyClass.objects.get(...)
w = instance.image.width
h = instance.image.height
instance.image.open()
original = Image.open(instance.image)