Django-получение метода сохранения изображений PIL для работы с хранилищем Amazon s3boto

чтобы изменить размер изображений при загрузке (используя PIL), я переопределяю метод сохранения для моей модели статьи следующим образом:

def save(self):
    super(Article, self).save()
    if self.image:
        size = (160, 160)
        image = Image.open(self.image)
        image.thumbnail(size, Image.ANTIALIAS) 
        image.save(self.image.path)

это работает локально, но в производстве я получаю ошибку: NotImplementedError: этот сервер не поддерживает абсолютные пути.

Я попытался заменить изображения.сохранить строку с

image.save(self.image.url)

но затем я получаю IOError: [Значение errno 2: нет такого файла или каталога: 'https://my_bucket_name.s3.amazonaws.com/article/article_images/2.jpg'

это правильное расположение изображения, хотя. Если я помещу этот адрес в браузер, изображение будет там. Я попробовал еще кое-что, но пока безуспешно.

1 ответов


вы должны попытаться избежать сохранения в абсолютные пути; есть API хранения файлов выделяет эти типы операций.

смотреть на!--7-->документация PIL, явствует, что save() функция поддерживает передачу файлового объекта вместо пути.

Я не в той среде, где я могу проверить этот код, но я считаю, что вы должны сделать что-то вроде этого вместо последней строки:

from django.core.files.storage import default_storage as storage

fh = storage.open(self.image.name, "w")
format = 'png'  # You need to set the correct image format here
image.save(fh, format)
fh.close()