ValueError при загрузке увеличенных изображений django в облако google

У меня есть эта модель, которая отлично работает при загрузке уменьшенных изображений в медиафайл в моем проекте django

class ItemImage(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    image = models.ImageField(null=True, blank=True,upload_to='item_img/')
    created = models.DateTimeField(auto_now_add=True)
    def save(self):
        im = Image.open(self.image)
        im_name = uuid.uuid4()
        im = im.convert('RGB')
        output = BytesIO()
        # Resize/modify the image
        im = im.resize((700, 700))
        # after modifications, save it to the output
        im.save(output, format='JPEG', quality=90)
        output.seek(0)
        # change the imagefield value to be the newley modifed image value
        self.image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.image.name, 'image/jpeg',
                                        sys.getsizeof(output), None)
        super(ItemImage, self).save()

    def __str__(self):
        return self.item.title

Когда я изменил хранилище файлов на google cloud, я столкнулся с этой ошибкой при загрузке изображений

    ValueError at /ar/dashboard/my_items/edit_item/add_item_image/2/
Size 120495 was specified but the file-like object only had 120373 bytes remaining.

Обратите внимание, что изображения успешно загружаются, когда я удаляю метод сохранения, который был добавлен, так что есть ли что-то, что мне нужно изменить в этом методе сохранения при работе с gcloud?

я нашел похожую проблему на github, и он объяснил ошибку следующим образом "Я думаю, это ошибка в коде конечного пользователя, которую GCS отвергает, а другие сервисы относятся к ней более либерально. Вызов sys.getsizeof(fi_io) выдает размер объекта BytesIO, а не размер буфера"

поэтому я изменил sys.getsizeof(output) на len(output.getbuffer()) и все, это работает как с облаком google, так и с локальными медиафайлами

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