環境
- nodejs v8.8.1
ここではAWSでいうS3にあたるGoogle Cloud StorageへNodejsでローカルのファイルをアップロードしたりしてしてみる。
サービスアカウントの作成
まずは権限設定 アクセスに必要なキーを含むJSONファイルをゲットする必要がある。
- GCPコンソールへログイン
- GCP のプロジェクトを選択
- 上の検索バーで「API」と入力 「認証情報 APIとサービス」と項目をクリック
- 「認証情報を作成」をクリック「サービスアカウントキー」を選択
- 新しいサービスアカウントを選択、サービスアカウント名は任意、役割でストレージに権限を振る
- 作成をクリック
- するとJSONファイルがダウンロードされるので保管
詳しくは以下 Google Cloud Platform のサービスアカウントキーを作成する | MAGELLAN BLOCKS
ライブラリのインストール
公式ライブラリの@google-cloud/storageを使う yarnでインストール
yarn add @google-cloud/storage
基本
async/awaitによる同期処理が可能なので使う。以下のように
const {Storage} = require('@google-cloud/storage'); const storage = new Storage({ projectId: 'プロジェクトID', keyFilename: 'さっき保存したJSONのパス' }); const bucketName = 'バケット名'; const main = async() => { var filename ='index.js'; await storage .bucket(bucketName) .upload(filename, {gzip: true}) .then(res => { // 公開状態にする場合 // res[0].makePublic(); console.log(res[0].metadata); console.log(`${filename} uploaded to ${bucketName}.`); }) .catch(err => { console.error('ERROR:', err); }); } main();
これでnode index.js
をするとファイルがGCSにアップロードされる。
一覧表示
ファイル一覧 await storage .bucket(bucketName) .getFiles() .then(results => { const files = results[0]; files.forEach(file => { console.log(file.name); }); }) .catch(err => { console.error('ERROR:', err); });
プレフィックスで絞ることもできる(suffixはない模様
await storage .bucket(bucketName) .getFiles({ prefix: 'us-central1-projects/' }) .then(results => { const files = results[0]; files.forEach(file => { console.log(file.name); }); }) .catch(err => { console.error('ERROR:', err); });
その他のAPI
以下のサンプルコード集が参考になる。
https://github.com/googleapis/nodejs-storage/blob/master/samples/files.js