在 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 非常慢

django imagekit处理图片

解决:ModuleNotFoundError No module named 'imagekit'

通过保护 Django 上的纵横比来调整照片大小

valueerror: 生成 csv 文件并在 django 中保存到模型时对已关闭文件的 i/o 操作

django头像自定义模板标签