Как изменить размер загруженного изображения до AWS S3, используя Django? - PullRequest
0 голосов
/ 17 апреля 2020

Я создал приложение для блога, используя Django с дополнительными функциями загрузки миниатюр сообщений. В разработке все работало отлично, однако, когда я перешел в производство и начал сохранять и обслуживать изображения с помощью DigitalOcean Spaces, изображения, похоже, не загружаются, и я получаю ошибку сервера. Может кто-нибудь сказать мне, как я могу адаптировать мой код, чтобы сделать эту работу? Это моя текущая конфигурация:

models.py

def image_path(instance, filename):
    basefilename, file_extension = os.path.splitext(filename)
    chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
    randomstr = ''.join((random.choice(chars)) for x in range(10))
    #return 'listings/{listing}/{randomstring}{ext}'.format(listing = instance.slug, randomstring = randomstr, ext = file_extension)
    return 'posts/{randomstring}.jpg'.format(randomstring = randomstr)

class Post(models.Model):
    title = models.CharField(_('title'), max_length=50)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    slug = models.SlugField(_('slug'), unique=True, null=True, blank=True)
    body = models.TextField(_('body'))
    image = models.ImageField(_('image'), blank=True, upload_to=image_path, validators=[validate_image])
    date_created = models.DateTimeField(_('date created'), auto_now_add=True)
    date_modified = models.DateTimeField(_('date modified'), auto_now=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'slug': self.slug})

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if self.image:
            img = Image.open(self.image.path)
            if img.mode != 'RGB':
                img = img.convert('RGB')
            if img.width > 100:
                ratio = img.width / img.height
                height = 100 / ratio
                output_size = (100, height)
                img.thumbnail(output_size)
            img = ImageOps.exif_transpose(img)
            img.save(self.image.path, optimize=True, quality=90, format='JPEG')

Примечание: я добавил функцию image_path только для контекста, и я знаю, что это должна быть моя функция сохранения это должно измениться, я просто не знаю, как это сделать, сохранив ту же способность сохранения изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...