7

アップロード時に (PIL を使用して) 画像のサイズを変更するために、Article モデルの save メソッドを次のようにオーバーライドしています。

def save(self):
    super(Article, self).save()
    if self.image:
        size = (160, 160)
        image = Image.open(self.image)
        image.thumbnail(size, Image.ANTIALIAS) 
        image.save(self.image.path)

これはローカルでは機能しますが、本番環境では次のエラーが発生します: NotImplementedError: このバックエンドは絶対パスをサポートしていません。

image.save 行を次のように置き換えてみました

image.save(self.image.url)

しかし、IOError: [Errno 2] No such file or directory: ' https://my_bucket_name.s3.amazonaws.com/article/article_images/2.jpg 'が発生します

それはしかし、画像の正しい位置です。そのアドレスをブラウザに入力すると、画像が表示されます。私は他の多くのことを試しましたが、今のところ運がありません。

4

3 に答える 3

13

絶対パスへの保存は避けてください。これらのタイプの操作を抽象化するFile Storage APIがあります。

PIL Documentationを見ると、save()関数はパスの代わりにファイルのようなオブジェクトを渡すことをサポートしているようです。

私はこのコードをテストできる環境にいませんが、最後の行の代わりに次のようなことをする必要があると思います:

from django.core.files.storage import default_storage as storage

fh = storage.open(self.image.name, "w")
format = 'png'  # You need to set the correct image format here
image.save(fh, format)
fh.close()
于 2013-02-04T05:53:51.920 に答える