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, так и с локальными медиафайлами