NodeJS 使用Admin SDK将文件上传到Firebase存储

7vhp5slm  于 2023-04-05  发布在  Node.js
关注(0)|答案(3)|浏览(210)

根据文档,我必须将文件名传递给函数才能上传文件。

// 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
}
8i9zcol2

8i9zcol21#

由于Firebase Admin SDK只是 Package 了Cloud SDK,因此您可以使用Cloud Storage node.js API documentation作为参考,看看它能做什么。
你不必提供本地文件。你也可以使用节点流上传。有一个方法File.createWriteStream(),它可以让你使用一个WritableStream。还有一个File.save(),它可以接受多种东西,包括Buffer。有使用每个方法here的例子。

cotxawn7

cotxawn72#

我偶然发现这个问题,而上传图片从网址这里是我的解决方案上传缓冲区。

const fileContent = await fetch(url)
const buffer = await fileContent.arrayBuffer()
const bf = Buffer.from(buffer)
const id = uuid()
const bucket = storage.bucket()

const file = bucket.file('filePath' + id + '.png')

const up = await file.save(bf, {
                 contentType: 'image/png',
                 cacheControl: 'public, max-age=31536000',
           })
j8yoct9x

j8yoct9x3#

你应该使用内置函数
假设您在客户端接收到作为imageDoc的文件,并且

const imageDoc = e.target.files[0]

在node中,您现在可以获得对象的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',
     },
});

相关问题