express + busboy でfirebase storeにファイルをアップロードするサンプル
概要
express + busboyでfirebase storeにファイルをアップロードするサンプルです
実装
import * as Busboy from 'busboy' import { Request, Response } from 'express' const firebaseAdmin = require('firebase-admin') const serviceAccount = require('../firebase-key.json') firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.cert(serviceAccount), storageBucket: 'hogehoge' }) export default function (req: Request, res: Response) { const busboy = new Busboy({ headers: req.headers }); const allowMimeTypes = ['image/png']; const bucket = firebaseAdmin.storage().bucket(); const filename = 'fuga' const filepath = `uploaded_images/${filename}.png` const uploadFile = bucket.file(filepath) busboy.on('file', (fieldname: string, file: NodeJS.ReadableStream, filename: string, encoding: string, mimetype: any) => { if (!allowMimeTypes.includes(mimetype.toLocaleLowerCase())) { console.warn('disallow mimetype: ' + mimetype) return } file.pipe(uploadFile.createWriteStream({ metadata: { contentType: 'image/png' } })) file.on('end', () => { console.log('end') }); }); busboy.on('finish', () => { res.status(200) }); busboy.end(req.body) }
コメント
stream使えば割と簡潔に書けますね
以下のリポジトリで似たような実装をしてます