広告
Python(Django)でGoogle Storageにアップロードする方法
PythonでGoogle Cloud Storageに画像をアップロードする手順をまとめる。ここではGoogleにアップロードする前にPillowで加工するとする。
意外にうまくいかないことが多いが、結論は以下となる。
#file はリクエストから直接受け取ったデータ
#file = request.FILES.get('image')
filename = 'a.jpg'
image = PillowImage.open(file).convert('RGB')
new_image = image.resize((64, 64))
new_image_path = settings.BASE_DIR + '/media/' + filename
new_image.save(new_image_path, transparency=0)
blob = bucket.blob(filename)
blob.upload_from_filename(new_image_path)
return filename
上のコードでPillowImageと書いてあるのは、PillowのImageである。
結論
PythonのPillowで画像を加工したら、それをローカルに一度保存する。そのデータのパスをもとに、upload_from_filenameをかけてアップロードすればいい。
ポイントは下2行。
blob = bucket.blob(filename)
これはGoogleに保存するときの、向こうでのファイル名を指定する。ここではまだアップロードしていない。次の
blob.upload_from_filename(new_image_path)
で実際にアップロードする。upload_from_filenameの他にいくつか同じような関数があるので、ここで1時間以上の時間をムダにする人もいるだろう。ファイル名を使ってアップロードしたいときはこのupload_from_filenameを使う。
曖昧さをはっきりさせよう
このあたりをあいまいに書いている人間は二種類いる。一つはそもそもファイルfileがどこからきているか明示しない人間だ。彼らの一部はそのファイルをただのファイル名と考えているかもしれないし、リクエストの配列に入っている中身と思っているかもしれない。
もう一つのタイプは、upload_from_filenameと他の関数をぐじゃぐじゃに勘違いしているものだ。
広告
アップロード
広告
New
- Ubuntu に pyenv を利用して Python をインストールする
- 最強レンタルサーバーのmixhost(ミックスホスト):HTTP/3対応と爆速LiteSpeedがすごすぎる…
- サブのサイト・ブログのレンタルサーバーはリトルサーバーがぴったり:一つのレンタルサーバーに依存するのは危険という話
- 中級以上のアフィリエイターとブロガーはレンタルサーバーにエックスサーバーを選ぶ
- CentOS 7のPython 3.7.5はなぜかModuleNotFoundError: No module named ‘_ctypes’が出る
- Python データクラスの初期化関数(__post_init__)を使う