今回はGoogle Cloud PlatformのCloud StorageをPythonから使う方法を紹介します。
apiキーの作成
はじめにapiにアクセスするためのキーファイルを生成します。
GCPのコンソールにアクセスして「APIとサービス」「サービスアカウント管理」からサービスアカウントを作成します。
サービスアカウントを作成できたら横のメニューから秘密鍵をJSON形式で作成して保存します。
ライブラリのインストール
次のコマンドでライブラリをインストールできます。
pip3 install google-cloud-storage
接続
先程作成したapiキーを使用して接続します。
JSONファイルを直接読み込んでも大丈夫ですが、今回は面倒なのでJSONファイルの中身をそのままプログラム中の変数に入れる書き方を紹介します。
from google.oauth2 import service_account
from google.cloud import storage
from io import BytesIO #バイナリデータを扱うためのライブラリ
service_account_info = {ここにJSONファイルの中身をコピー}
credentials = service_account.Credentials.from_service_account_info(service_account_info)
client = storage.Client(
credentials=credentials,
project=credentials.project_id
)
オブジェクト作成
bucket = client.get_bucket("バケット名")
blob = bucket.blob("ファイル名")
blob.upload_from_file(バイナリデータからアップロード)
blob.upload_from_filename(ファイル名からアップロード)
blob.upload_from_string(文字列からアップロード)
バイナリデータのアップロードができるので例えばDjangoでフォームからアップロードされた画像ファイル等をそのままアップロードする事ができます。
ダウンロード
bucket = client.get_bucket("バケット名")
blob = bucket.blob("ファイル名")
file = BytesIO(blob.download_as_string()) #バイナリデータとしてダウンロード
blob.download_to_filename("ファイル名") #ファイル名にダウンロード
blob.download_as_bytes() #バイナリデータとしてダウンロード
download_as_bytes()とBytesIO(blob.download_as_string())どちらでもバイナリデータとしてダウンロードできます。