在 django 中使用“ImageKit”对已关闭文件进行 I/O 操作
Posted
技术标签:
【中文标题】在 django 中使用“ImageKit”对已关闭文件进行 I/O 操作【英文标题】:I/O operation on closed file in django with 'ImageKit' 【发布时间】:2020-07-28 10:27:02 【问题描述】:在我的 django 项目中,我使用 ImageKit 来调整我的个人资料图像的大小。
我有一个包含这些字段的模型:
pasfoto = models.ImageField(upload_to='images/', blank=True)
pasfoto_thumbnail = ImageSpecField(source='pasfoto',
processors=[ResizeToFill(150, 200)],
format='JPEG',
options='quality': 60)
ImageSpecField 是从 Imagekit 导入的。
我通过 Django-storages 将图像保存在 amazon-S3 上
当我通过通过 UpdateView 呈现的模板(编辑表单)上传图像时,它会在成功后显示详细模板。 此模板中使用了 pasfoto_thumbnail,它通过 Django 中基于类的 DetailView 呈现。
在这种情况下,我看到错误“对已关闭文件的 I/O 操作”。但是在浏览器刷新后会显示正确的图像。 发生了什么,我该如何解决这个问题?
Django Debug page/info for this error
【问题讨论】:
【参考方案1】:我最近遇到了同样的问题,它阻止我将django-storages
升级到最新版本。
我终于找到了这个old django-storages issue的问题。
在那个帖子中,他们提到了django s3 storages。迁移到该库似乎可以解决问题。
【讨论】:
【参考方案2】:我的旧项目和 Django 2 遇到了这个问题。我发现它发生在一些旧版本的包中。对我来说有帮助的是根据我从 githubdependabot 收到的警报升级 django 和枕头。
我运行pipenv install django=='2.2.24' pillow=='8.3.2'
,问题就解决了。
【讨论】:
以上是关于在 django 中使用“ImageKit”对已关闭文件进行 I/O 操作的主要内容,如果未能解决你的问题,请参考以下文章
heroku 上的 Django 和 imagekit 保存到 AWS S3 非常慢
解决:ModuleNotFoundError No module named 'imagekit'