19
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Firebase Admin SDKからStorageにアップロードする

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にファイルアップロードする方法

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
19
Help us understand the problem. What are the problem?