Django Проблема загрузки изображений Cloundinary

В настоящее время я изучаю Django и уже почти добрался до стадии развертывания, но столкнулся с проблемой при обслуживании статических/медийных файлов с помощью Cloudinary, следуя руководствам, как это сделать, это кажется достаточно простым. Я проверил поддержку Cloudinary, но не могу найти ничего, что могло бы помочь, просто интересно, есть ли у кого-нибудь какой-нибудь вклад.

Проблема в том, что я использую Exiffield (для получения информации об изображении) и ImageSpecField из ImageKit для изменения размера изображений для миниатюр, и я думаю, что это создает проблемы с Cloudinary.

Во-первых, я не могу загрузить изображения из Admin, я получаю Exception Value:Empty file ошибку.

Во-вторых, я получаю 400 Client Error: Bad Request for url: https://res.cloudinary.com/ **path to file*** при попытке открыть мой сайт (который обслуживается локально и находится в разработке

).

В качестве выгрузки используется ImageField. Я бы заменил его на CloudinaryField, но моя модель сильно зависит от ExifField, который не хочет читать из него.

Модель ниже.

image = models.ImageField(upload_to='images')
mid_thumbnail = ImageSpecField(source='image',
                                  processors=[ResizeToFit(220, 150)],
                                  format='JPEG',
                                  options={'quality': 100})
gallery_thumbnail = ImageSpecField(source='image',
                               processors=[ResizeToFit(300, 250)],
                               format='JPEG',
                               options={'quality': 100})
gallery_detail = ImageSpecField(source='image',
                                   processors=[ResizeToFit(1000, 850)],
                                   format='JPEG',
                                   options={'quality': 100})
title = models.CharField(max_length=100)
albums = models.ManyToManyField(Album, blank=True, related_name='photos')
feature_image = models.BooleanField(default=False)
description = models.CharField(editable=False, max_length=150, blank=True)
posts = models.ManyToManyField(Post, blank=True, related_name='pictures')

lens = models.TextField(editable=False, max_length=100, default='Lens Data')
caption = models.CharField(editable=False, max_length=1000, default='Caption info')
file_size = models.CharField(editable=False, max_length=20, default='File_size')
width = models.IntegerField(blank=True, null=True, editable=False)
height = models.IntegerField(blank=True, null=True, editable=False)
categories = models.ForeignKey(Catagory, on_delete=models.CASCADE, null=True, blank=True)
objects = models.Manager
info = models.TextField(default='**info empty**', blank=True, help_text="editable caption info no reversable")
exif = ExifField(source='image', denormalized_fields={'lens': exifgetter('LensID'),
                                                      'caption': exifgetter('Description'),
                                                      'file_size': exifgetter('FileSize'),
                                                      'description': exifgetter('Headline')

                                                      })


def save(self, *args, **kwargs):
    super(Photo, self).save(*args, **kwargs)
    """Get EXIF"""
    im = Image.open(self.image.path)
    try:
        info = im.getexif()[0x010e]
        self.info = info
    except KeyError:
        pass
    """Save image dimensions."""
    im = Image.open(pjoin(MEDIA_ROOT, self.image.name))
    self.width, self.height = im.size
    im.save(self.image.path)
    super(Photo, self).save(*args, **kwargs)

def __str__(self):
    return self.title

def albums_(self):
    lst = [x[1] for x in self.albums.values_list()]
    return ",".join(lst)

def size(self):
     return "%s x %s" % (self.width, self.height)```

Спасибо за эту информацию, очень признателен. Но я фактически перешел на S3, который дал мне те же проблемы, но с более полными сообщениями об ошибках, чтобы я мог решить проблему.

self.image.path в методе сохранения модели было проблемой. Я просто изменил его на self.image и все заработало. Проблема заключалась в использовании absolute path к объекту, который не поддерживается S3 или, как я предполагаю, Cloudinary.

Вернуться на верх