express.jsでファイルをGoogle Cloud Storageにアップロードする(2)
この記事はhttp://befool.co.jp/blog/chainzhang/expressjs-file-upload-to-google-cloud-storage-1/の引き続きになる。
Google Cloud Storage
Google Cloud Storageを使うには、Google Cloudに登録するのが必要。詳しくはGoogle Cloudの公式サイトへ:https://cloud.google.com/
登録完了したら、My Consoleへ、新規プロジェクトdemo
:
新規が完了したら、Cloud Storageのページへ。新規したプロジェクトはまだバケットがないので、下記の画面が表示される:
「バケットを作成」をクリックして、upload-demo
というバケットを作成する:
バケットとは?
簡単に言えば、ファイルのスコープみたいなもんで、サイトのドメインごとにバケットを作成することが多い。
自分のアプリでGoogle Cloud Storageを利用するには、Google API認証用の情報が必要。メニュー「APIと認証」の「認証情報」というページにアクセスし、「新しいクライアントIDを作成」をクリックして認証情報を作成する:
ここで、サービスアカウントを選んでください。作成ボタンをクリックすると情報がJSONファイルとしてダウンロードされる。
普段Google APIはoauth2.0で認証を行う。しかし、そのAPIを利用するのがアプリの場合は(Server to Server)、サービスアカウントのほうが直接で簡単。
express.js + multerでGoogle Cloud Storageにファイルをアップロード
先ほどダウンロードしたJSONファイルをexpress.jsのプロジェクトディレクトリーに移して、require
する:
Google APIのrequire
も忘れずに:
これで準備完了、まずGoogle APIの認証をしてみる:
npm start
して、認証が通った場合は、コンソールが下記のようなメッセージが表示されるはず:
認証はちゃんと通ったので、Google APIを利用して、ファイルをGoogle Cloud Storageにアップロードする機能を実装しよう:
multerの設定を調整する:
multerにinMemory
オプションを追加する:
ルートを調整
テンプレート調整
これで、実装完了、早速プレビューしてみる:
できた! ちなみに、アップされたファイルはGoogle Cloud Consoleからも確認できる:
まとめ
この記事ではexpress.jsでGoogle Cloud Storageにファイルをアップロードするアプリを作ったが、どれも必要最低限の実装になって、実際の運用にはまだたくさんの工夫をしなければならない。
multerは便利だが、inMemory
オプションをtrueしている場合は、大量のファイルを一気にアップロードすると、メモリオーバーフローエラーが出る可能性があるので、プロダクションの場合は別のアプローチを考えたのがおすすめ。