python – 将BytesIO保存到Django ImageField

我有一个网络刮板,我想下载它正在抓取的页面的图像,并将其保存为Django模型中的“屏幕截图”
ImageField.我正在使用此代码:

def save_screenshot(source,screenshot):
    box = (0, 0, 1200, 600)
    im = Image.open(io.BytesIO(screenshot))
    region = im.crop(box)
    tempfile_io = io.BytesIO()
    region.save(tempfile_io, 'JPEG', optimize=True, quality=70)
    source.screenshot.save(source.slug_name+"-screenshot",ContentFile(tempfile_io.getvalue()),save=True)

它将屏幕截图保存到/ media / news_source_screenshots /目录,但不将其保存到模型中.模型字段定义为:

screenshot = models.ImageField(upload_to='news_source_screenshots',blank=True,null=True)

我错过了什么?

最佳答案 事实证明上面的代码效果很好!问题是我使用这样的代码调用上面的方法:

source = NewsSource.objects.get(name=name)
html,screenshot = get_url(source.url)
save_screenshot(source,screenshot)
source.save()

所以save_sceenshot方法有效,但是我的source.save()调用覆盖了它所完成的工作.去搞清楚!

点赞