调用后通过打字稿中的云功能将base 64图像上载到Firebase存储

时间:2019-02-19 19:22:02

标签: javascript google-cloud-storage google-cloud-functions firebase-admin

嗨,我想通过云功能将图像上传到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

1 个答案:

答案 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)