У меня есть приложение для блога 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?В чем причина этого и как мне правильно реализовать эту настройку размера эскиза.