【问题标题】:How to upload an image of File type to Firebase Storage from Node.js with the Admin SDK如何使用 Admin SDK 从 Node.js 将文件类型的图像上传到 Firebase 存储
【发布时间】:2021-11-24 06:48:50
【问题描述】:

我在前端运行 Angular,在后端运行用于 Node.js 的 Firebase Admin SDK。
我想要实现的是允许用户使用file 类型的简单<input> 从他的计算机中选择图像。当我在 Angular 端收到 File 类型的用户图像时,我想将其发送到我的 Node.js 服务器并让他将其上传到 Firebase 存储。
以下是我将图像发送到 Node.js 的方式:

  method(imageInput): void {
    const image: File = imageInput.files[0];
    const reader = new FileReader();

    reader.addEventListener('load', (event: any) => {
      const imageData = {
        source: event.target.result,
        file: image
      }

      this.myService.uploadImage(imageData.file).subscribe(
        (res) => {
          // image sent successfully 
        },
        (err) => {
           // error
        })
    });

    reader.readAsDataURL(image);
  }

所以在 Node.js 方面,我看不到上传这张图片的方法。
我正在尝试:

      admin.storage().bucket().upload(imageFromAngular, { --> Here's the problem
        destination: "someDestination/",
        contentType: "image/png",
        metadata: {
          contentType: "image/png"
        }
    }).then(() => { 
        // send successful response
    }).catch(err => {
       // send error response
    });

问题在于upload 方法仅将图像和选项的路径 作为参数。但是在这种情况下,我不能传递图像的路径,而是可以传递图像本身。我读了这个 - https://googleapis.dev/nodejs/storage/latest/ 但我找不到任何适合我需要的东西。

这样做的正确方法是什么?

更新:

以下是对我采用的方法的更详细说明:

我在我的method 中使用image 文件的arrayBuffer 方法。此方法返回一个 ArrayBuffer 类型的承诺。我得到值并将其发送到我的服务器。
服务器使用Buffer.from(ArrayBuffer, 'base64') 转换数据,然后我可以安全地使用save API (https://googleapis.dev/nodejs/storage/latest/File.html#save)。

为了稍后获取图像,我使用download - (https://googleapis.dev/nodejs/storage/latest/File.html#download)。

【问题讨论】:

    标签: javascript node.js angular google-cloud-storage firebase-admin


    【解决方案1】:

    您可以将字节流(或Buffer)写入云存储。

    【讨论】:

    • 是的,这就是我所做的,将编辑答案以显示确切的解决方案
    猜你喜欢
    • 2021-07-30
    • 2019-08-02
    • 2020-05-09
    • 2020-07-10
    • 2020-11-21
    • 2018-06-10
    • 2020-05-07
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多