如何使用 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
)写入云存储。
createWriteStream()
API 用于将数据流式传输到云存储:https://googleapis.dev/nodejs/storage/latest/File.html#createWriteStream
save()
API 用于将缓冲数据写入云存储:https://googleapis.dev/nodejs/storage/latest/File.html#save
我在前端有 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
)写入云存储。
createWriteStream()
API 用于将数据流式传输到云存储:https://googleapis.dev/nodejs/storage/latest/File.html#createWriteStreamsave()
API 用于将缓冲数据写入云存储:https://googleapis.dev/nodejs/storage/latest/File.html#save