PHPプログラムでアップロードする方法とは別に、curlコマンドを使用してファイルをアップロードする方法。
APIの有効化
APIライブラリで「Google Cloud Strage API」を有効化する。
「OAuth同意画面」
任意のアプリケーション名を登録して、スコープの追加を行う。
「Google Cloud Storage のデータの管理」を選択。
認証情報を作成
「認証情報を作成」からOAuthクライアントID を選択して作成を進める。「承認済みのリダイレクト URI」には「http://localhost」を指定して完了すると「クライアントID」と「クライアントシークレット」が表示される。
※「クライアントID」と「クライアントシークレット」は後からJSONファイルをダウンロードして参照することも可能。
認証コード取得
https://accounts.google.com/o/oauth2/v2/auth にクエリを指定してブラウザでアクセスする。
- redirect_uri:http://localhost を指定
- client_id:先ほど取得したクライアントIDを指定
- scope:APIのスコープURIを指定
- response_type:code(固定値)
- access_type:offline(固定値)
https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=http://localhost&client_id=xxxxxxx.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/devstorage.read_write&response_type=code&access_type=offline
認証が完了するとlocalhostにリダイレクトするが、エラーとなる。
このエラーURLに含まれているcodeの値を後ほど使用する。
http://localhost/?code=xxxxxxxxx&scope=https://www.googleapis.com/auth/devstorage.read_write
アクセストークン/リフレッシュトークンの取得
先ほど取得したcodeを使用してアクセストークンとリフレッシュトークンを取得する。
- REDIRECT_URI:http://localhostを指定
- CLIENT_ID:認証情報作成時のクライアントIDを指定
- CLIENT_SECRET:認証情報作成時のシークレットIDを指定
- AUTHORIZATION_CODE:先ほど取得したcodeを指定
curl --data "redirect_uri=[REDIRECT_URI]" \
--data "client_id=[CLIENT_ID]" \
--data "client_secret=[CLIENT_SECRET]" \
--data "code=[AUTHORIZATION_CODE]" \
--data "grant_type=authorization_code" \
--data "access_type=offline" \
https://www.googleapis.com/oauth2/v4/token
{
"access_token": "xxxx",
"expires_in": 3600,
"refresh_token": "xxxx",
"scope": "https://www.googleapis.com/auth/devstorage.read_write",
"token_type": "Bearer"
}
curlを実行するとアクセストークンとリフレッシュトークンを取得できる。
この値を使用してファイルをアップロードするためのURLを作成する。
ファイルのアップロード
GETパラメータに下記の値を指定する。
- OBJECT:アップロードするローカルのファイル
- OAUTH2_TOKEN:アクセストークン
- OBJECT_CONTENT_TYPE:アップロードファイルのMIMEタイプ
- BUCKET_NAME:アップロード先のバケット名
- OBJECT_NAME:アップロード後のファイル名
curl -X POST --data-binary @[OBJECT] \
-H "Authorization: Bearer [OAUTH2_TOKEN]" \
-H "Content-Type: [OBJECT_CONTENT_TYPE]" \
"https://www.googleapis.com/upload/storage/v1/b/[BUCKET_NAME]/o?uploadType=media&name=[OBJECT_NAME]"
これでファイルのアップロードが完了する。