anz blog

firebase-adminを使ってアップロードする時にMIME(ContentType)を設定する方法

2019-06-21 #Firebase #Node.js

ざっくりまとめ。

  • firebase-admin でファイルをアップロードするとタイプが application/octet-stream に設定される
  • metadata を適切に設定する必要がある
    • metadata: {contentType: "image/png"} という感じ

です。

環境

  • node v8.16.0
  • firebase-admin v8.1.0

問題

firebase-admin を使って Firebase Storage に画像ファイルをアップロードしてみたのですが、
アップロード自体は問題なくできたものの、アップされたファイルをみてみると、タイプが application/octet-stream となってしまう。
これだと表示するではなく勝手にDLされてしまうという挙動になってしまったりといろいろ不都合なので然るべきタイプにしたい。
ちなみにコードはこんな感じです。

admin.storage().bucket().upload("Storage上のパス", {
  destination:  "ローカルのファイルパス",
})

対応

アップした時に判定されて自動的に適切なものが設定されるということではないみたいなので、
こちらで適切に指定する必要があります。

admin.storage().bucket().upload("Storage上のパス", {
  destination:  "ローカルのファイルパス",
  metadata: {
    contentType: "image/png"
  }
})

こういう感じです。
実際は固定文字列ではなくて、ファイルから読み取って判定する必要があるかと思いますが(笑)

他にも metadata をつかうと cacheControl なんかも設定できたりするので見ておくとよさそうです。

参考