嗨,我想通过云功能将图像上传到Firebase存储中,下面是我的代码,该图像在存储桶中显示,但图像损坏。
var base64EncodedImageString = driverDetails.profilePhoto,
mimeType = 'image/jpeg',
fileName = 'Thumbnail64.jpg';
const imageBuffer = new Buffer(base64EncodedImageString, 'base64');
var bucket = admin.storage().bucket();
var file = bucket.file('profile-imagesss/' + fileName);
file.save(imageBuffer, {
metadata: { contentType: mimeType },
})
其中driverDetails.profilePhoto是在主体上发送的base64图像,例如data:image / jpeg; base64,/ 9j / 4AAQSkZJRgABAQEAYABgAA
答案 0 :(得分:0)
您的代码面临的第一个挑战是
const imageBuffer = new Buffer(base64EncodedImageString, 'base64');
改用这个
const imageBuffer = Buffer.from(base64EncodedImageString, 'base64');
其次,您正在从 base64 数据和 mime 数据创建缓冲区。
最后,你还没有给出令牌元数据
下面的代码有效
const { photo } = data
const { nanoid } = require("nanoid")
const filename = nanoid() + '.jpg'
const getBase64MimeType = encoded => {
let result = null
if (typeof encoded !== 'string') {
return result
}
const mime = encoded.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/)
if (mime && mime.length) {
result = mime[1]
}
return result
}
const getBase64Data = encoded => {
const base64EncodedString = encoded.replace(/^data:\w+\/\w+;base64,/,'')
return base64EncodedString
}
const contentType = getBase64MimeType(photo)
const photoData = getBase64Data(photo)
const fileBuffer = Buffer.from(photoData,"base64")
const bucket = admin.storage().bucket()
const token = nanoid()
const options = {
metadata: {
contentType,
metadata: {
firebaseStorageDownloadTokens: token,
}
},
}
const filePath = 'membership/' + filename
const file = bucket.file(filePath)
await file.save(fileBuffer,options)