我有一个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存储桶路径?这是什么原因,我将如何正确实施此缩略图大小调整。