将调整大小的 Django 图像上传到谷歌云时出现 ValueError
发布于2022-05-07 22:25
阅读(1051)
评论(0)
点赞(27)
收藏(1)
我有这个模型,在将调整大小的图像上传到我的 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()
im = im.resize((700, 700))
im.save(output, format='JPEG', quality=90)
output.seek(0)
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
当我将文件存储更改为谷歌云时,我在上传图像时遇到了这个错误
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())
,它适用于谷歌云和本地媒体文件
站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群
欢迎关注我的公众号:程序员总部,关注公众号回复python,免费领取 全套python视频教程,关注公众号回复充值+你的账号,免费为您充值1000积分
所属网站分类:
技术文章 >
问答