LoginSignup
20

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-03-28

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20