2
私は、スクラップしているページのイメージをダウンロードし、それをDjangoモデルの "screenshot" ImageFieldとして保存するWebスクレーパーを持っています。私はこのコードを使用しています:BytesIOを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)
それは/メディア/ news_source_screenshots /ディレクトリにスクリーンショットが保存されますが、モデルに保存されません。モデルフィールドは、次のように定義されます。
screenshot = models.ImageField(upload_to='news_source_screenshots',blank=True,null=True)
何が欠けていますか?
データなしで一時ファイルを保存していることがわかりました。ソースファイル "source.screenshot.save(source.slug_name +" - screenshot "、ContentFile(region.get_value())に' region'を保存する必要があります。 、save = True) '、あなたの一時ファイルの領域を覚えています。tempfile_ioはvoidバッファーです –
ありがとうございます。@ german-alzate-martinezありがとうございました。バッファーインターフェイス 'code'に保存され、画像は/ media/news_source_screenshost /ディレクトリに保存されません –
バッファを文字列ioに変更してみてください。 –