mathpython

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と他の関数をぐじゃぐじゃに勘違いしているものだ。

広告

教育総合サイト

高校化学専門サイト

色辞典

数の辞典