如何使用 Admin SDK 从 Node.js 将文件类型的图像上传到 Firebase 存储

How to upload an image of File type to Firebase Storage from Node.js with the Admin SDK

我在前端有 Angular 运行,在后端有 Node.js 的 Firebase Admin SDK。
我想要实现的是允许用户使用 file 类型的简单 <input> 从他的计算机 select 图像。当我在 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 方法。此方法 returns 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).

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