環境・バージョン
- node version v14.4.0
- "firebase-admin": "^8.7.0"
- "tmp": "^0.2.1"
実装
Firebase Admin SDKの初期化
firebase-admin.js
varadmin=require('firebase-admin')// Retrieve environment variablesconstServiceAccountFilePath=process.env.FIREBASE_SERVICEACCOUNT_FILEPATHconstStorageURL=process.env.FIREBASE_STORAGE_URL// xxxxx.appspot.comconstserviceAccount=require(ServiceAccountFilePath)admin.initializeApp({credential:admin.credential.cert(serviceAccount),storageBucket:StorageURL,})module.exports=admin
temp fileを使ってアップロード
Firebase Storageに対してファイルをアップロードするために、GCP Node.jsライブラリのBucket.uploadメソッドを利用しました。
一時的ファイル作成と削除にはtmpというサードパッケージを利用しました。
firebase-storage.js
constfs=require('fs')consttmp=require('tmp')constadmin=require('./firebase-admin')// 上記の初期化コードをインポートconstrequestToStorageService=(cloudFilePath,fileContent)=>{varpromisetmp.file(function_tempFileCreated(err,path,fd,cleanupCallback){if(err)throwerrtry{constbucket=admin.storage().bucket()fs.writeFile(path,JSON.stringify(fileContent),err=>{// 一時ファイルに書き込みif(err)throwerr})promise=bucket.upload(path,{// ファイルをFirebase Storageへアップロードdestination:cloudFilePath,metadata:{contentType:'application/json'},})}finally{cleanupCallback()// ファイル削除}})returnpromise}
tmp.file(function _tempFileCreated(err, path, fd, cleanupCallback)
によって一時的ファイルのパス(path
)とファイルディスクリプタ(fd
)が渡されます。
そのファイルに書き込みし、Firebase Storageへアップロードします。
また、bucket.upload
はPromiseを返します。