为什么img.thumbnail调整会引发FileNotFoundError [Errno2]没有这样的文件目录?

时间:2018-11-29 19:42:35

标签: python django amazon-s3 python-imaging-library

我有一个django博客应用程序,该应用程序部署在Heroku上,并且具有从AWS S3 Bucket提供的图像。当用户尝试上传图像时,我们使用PIL根据if条件(如下面的 models.py 中所示)对尺寸进行缩略图调整。

当我尝试更新个人资料图片时,它会抛出可怕的内容:

FileNotFoundError at /profile/

[Errno 2] No such file or directory: 'profile_pics/0umkn7tybif11.jpg'

对错误的追溯还显示了这些关键行:

 /app/users/signals.py in save_profile

        instance.profile.save()

     ...

▶ Local vars
/app/users/models.py in save

                img.save(self.image.name)

     ...

▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/PIL/Image.py in save

                    fp = builtins.open(filename, "w+b")

     ...

▶ Local vars 

我的 models.py 文件似乎包含此错误中要解决的代码:

from django.db import models
    from django.contrib.auth.models import User 
    from PIL import Image 
    from django.core.files.storage import default_storage as storage

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        image = models.ImageField(default='default.jpg', upload_to='profile_pics')

        def __str__(self):
            return f'{self.user.username} Profile'

        def save(self, **kwargs):
            super().save()

            img = Image.open(storage.open(self.image.name))

            if img.height > 300 or img.width > 300:
                output_size = (300, 300)
                img.thumbnail(output_size)
                img.save(self.image.name)

最后,如果我从models.py文件中删除以下代码,则该应用正常运行:

if img.height > 300 or img.width > 300:
    output_size = (300, 300)
    img.thumbnail(output_size)
    img.save(self.image.name)

似乎img.save(self.image.name)没有正确访问s3存储桶路径?这是什么原因,我将如何正确实施此缩略图大小调整。

0 个答案:

没有答案