web-dev-qa-db-ja.com

管理SDKを使用してFireBaseストレージにファイルをアップロードします

docs によると、ファイルをアップロードするためにファイル名を関数に渡す必要があります。

// Uploads a local file to the bucket
await storage.bucket(bucketName).upload(filename, {
  // Support for HTTP requests made with `Accept-Encoding: gzip`
  gzip: true,
  metadata: {
    // Enable long-lived HTTP caching headers
    // Use only if the contents of the file will never change
    // (If the contents will change, use cacheControl: 'no-cache')
    cacheControl: 'public, max-age=31536000',
  },
});
 _

私のサーバーサイドコードでFirebase管理SDK(NodeJS)を使用しています。その後、関数がfilePathにつながるファイル名のみを受け入れると、これをアップロードします。

私はこのようなことをすることができるようになりたいです


app.use(req: Request, res: Response) {
 const file = req.file;
// upload file to firebase storage using admin sdk
}

 _
10
Chima Precious

FireBase管理SDKはCloud SDKを折り返すだけなので、 Cloud Storage Node.js APIのドキュメント を参照できるものを参照してください。

ローカルファイルを提供する必要はありません。ノードストリームを使用してアップロードすることもできます。メソッドが file.CreateWriteStream() が機能するWritableStreamを取得します。 file.save() バッファを含む複数種類のものを受け入れます。各メソッドを使用する例が ここ

1
Doug Stevenson

あなたがするべきものは組み込み関数を使うことです

あなたがクライアント側のimageDocとしてファイルを受け取るとしましょう

 const imageDoc = e.target.files[0]
 _

ノードでは、オブジェクトへのURLパスを取得できます。

 const imageDocUrl = URL.createObjectURL(imageDoc)
 _

だからあなたの最後のコードはされます

 // Uploads a local file to the bucket
    await storage.bucket(bucketName).upload(imageDocUrl, {
         // Support for HTTP requests made with `Accept- 
        Encoding: gzip`
        gzip: true,
         metadata: {
            // Enable long-lived HTTP caching headers
           // Use only if the contents of the file will never change
           // (If the contents will change, use cacheControl: 'no-cache')
          cacheControl: 'public, max-age=31536000',
     },
});
 _
0
Maduekwe Pedro