【发布时间】: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