Django+herokuでS3を使わない画像の保存方法
cloudinaryというアドオンを使って、画像を保存します。
画像の保存というとamazon s3が思い浮かぶと思いますが、あれほんの少しお金かかりますよね?
スタートということで、完全無料でやるためにcloudinaryを使ってみます。
cloudinaryのアドオンは↓です。
https://elements.heroku.com/addons/cloudinary
無料の範囲は↓です。
Storage: 10 GB Monthly Bandwidth: 20 GB Total Images & Videos: 300,000 Monthly Transformations: 20,000
準備
ライブラリをインストールする
pip install cloudinary
herokuでアドオンを追加して、画面の流れに沿って操作してください。
画像をアップロードする
import cloudinary import cloudinary.uploader import cloudinary.api cloudinary.config( cloud_name="xxxxx", api_key="xxxxxxxxxx", api_secret="xxxxxxxxxxxxxxxx" ) def upload(image): result = cloudinary.uploader.upload(image) if __name__ == '__main__': upload('sample.jpg')
ちなみに、urlを指定しても保存してくれます。
upload('http://sample.com/sample.jpg)
Djangoのtemplateで画像を表示する
settingsにcloudinary
を追加する
INSTALLED_APPS = [ ... 'cloudinary', ... ]
tempalteで以下のようにする
<!DOCTYPE html> <html> <head> {% load cloudinary %} </head> <body> {% cloudinary "public_id" crop="fill" %} </body> </html>
もちろん、view内でpublic_id部分を置換しても良いです。
置換する場合は↓のようにします。
{% cloudinary public_id crop="fill" %}
context = { 'public_id': 'xxxxxxxxxxxxxxx', } return self.render_to_response(context)
public_idを自分で設定する場合
アップロードする際にpublic_id
を指定します。
result = cloudinary.uploader.upload(image, public_id='kyaro_kyawawa')
画像のアップロードは↓にもっと詳しいドキュメントが書かれています。
参考にすると役に立つはずです。