GCPのGoogle Cloud Storage(以下、GCS)に存在するファイル(例えばテキストファイル)をNode.jsを使って読み込んでみたかったのですが、ウェブ上ではあまり記事が存在しなかったので、こちらの記事で紹介したいと思います。
CLIでの確認
最初にコマンドライン上でファイルが開けるかを確認しておきます。 今回は仮でプロジェクトIDをproject-id、バケット名をbucket-name、ファイル名をhello.txtとしています。
gcloudコマンドが使えるようにしておけば、gsutilコマンドも使えるようになるかと思います。
gsutil cat gs://bucket-name/hello.txt Hello World.
このように、ハローワールドが書かれたテキストファイルをアップしたことにします。
Node.jsから確認
それではこの記事でのメインの話です。
以下のドキュメントを参考にしました。
ファイルを開くために、downloadメソッドを用います。
const {Storage} = require('@google-cloud/storage'); const storage = new Storage({ projectId: 'project-id', keyFilename: 'key-file.json' }); const bucketName = 'bucket-name'; const textEncoding = require('text-encoding'); const TextDecoder = textEncoding.TextDecoder; const main = async(fileName, callback) => { await storage .bucket(bucketName) .file(fileName) .download() .then(function(data) { var contents = data[0]; var textDecoder = new TextDecoder("sjis"); var str = textDecoder.decode(Uint8Array.from(contents).buffer); callback(str) }); } main('hello.txt', function(str) { console.log(str) });
そして、パッケージをインストールしてあげます。
$ npm install @google-cloud/storage $ npm install text-encoding
この時、サービスアカウントで発行されたjsonファイルのkey-file.jsonをapp.jsと同じ階層に配置してあげます。 また、このスクリプトでは文字コードをsjisとしていますが、ここをutf-8とかに変更することが可能になっています。
$ node app.js Hello World.
そして、実行すると無事ファイルの中身を出力してくれました。
もちろん改行したファイルも読み込めるので、あとはこの文字列を処理させてあげればなんでもできそうですね!