FirebaseにはStorageサービスがありますよね。
サーバーから使いたい場合は、Admin SDKを使うのが順当かと思います。
ですがアップロードする方法が、ググっても意外と出てこなかったのでメモ。
クライアントからなら、いっぱい出てくるんですけどねー。
Node.jsでやっておりますが、他の言語でも同じように辿っていけばできるはず。
前提
公式ドキュメントをみると、中身はGoogle Cloud Storageに格納されるっぽいですね。
SDK的にもCloud StorageのAPIを使用するようになるみたいです。
ふむふむ、なるほど。
事前準備
まずはinitializeから。Admin SDK使ったことある人はいつものやり方ですね。
storageBucketの設定を忘れずに。
const admin = require('firebase-admin');
const serviceAccount = require('path/to/serviceAccountKey.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: '<BUCKET_NAME>.appspot.com'
});
const bucket = admin.storage().bucket();
あげるぞ
サーバー内のどこかにあるファイルをな!
対象ファイルがサーバー内のどこかにあって、パスがわかっている場合はこんな感じです。
const path = 'path/to/hoge.png';
const options = ;
try {
// オプションでfirebase consoleから見たときのパスを指定できる
await bucket.upload(path, { destination: 'path/in/firebase/hoge.png' });
} catch (err) {
console.log(err);
}
参考(公式ドキュメント):
https://cloud.google.com/nodejs/docs/reference/storage/2.3.x/Bucket#upload
変数で持ってるファイルをな!
サーバー内に保存せずに、直でfirebaseにあげたい場合はこんな感じです。
// firebase consoleから覗いたときのパスを指定する
const file = bucket.file('path/in/firebase/hoge.png');
try {
// hogeはアップロードしたいファイル
await file.save(hoge);
// contentTypeは別でセットしないとダメ
await file.setMetadata({ contentType: 'image/png' });
} catch (err) {
console.log(err);
}
なんかアップロードしたあとにfirestore上のファイルにメタデータをセットしなきゃなんないのがすごく微妙ですね、、
いいやり方ご存知の方、教えて下さーい!
参考(公式ドキュメント):
https://cloud.google.com/nodejs/docs/reference/storage/2.3.x/File#save
以上でした。
参考にさせていただきました
firebase-adminを使ってCloud FunctionからCloud Storageにファイルアップロードする方法