在node.js中创建Firebase存储访问令牌[重复]

jhkqcmku  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(132)

此问题已在此处有答案

Get Download URL from file uploaded with Cloud Functions for Firebase(26答案)
两年前关闭。
基本上,我有两种方法将文件上传到Firebase存储:
1.前端用图片的url调用后端,后端下载图片并通过bucket.upload上传(我喜欢这样,因为我可以设置storageAccessToken)
1.用户直接通过前端上传一个签名的URL,该URL在后端生成。(我不喜欢它,因为我不能设置storageAccessToken)
我有一个onFinalize触发器,每当一个新对象存储在firebase存储中时,它就会被调用。
在这个触发器中,我想为添加的这个特定对象创建一个firestore文档。
为了获取文件信息,我使用probe-image-size
问题是我需要一个文件的下载链接,没有storageAccessToken,据我所知我无法下载文件。
基本上问题是:我可以在onFinalize触发器中添加storageAccessToken吗?或者当我通过前端上传带有signedUrl的文件时,我可以添加storageAccessToken吗?

rekjcdws

rekjcdws1#

如果我正确理解了你的问题,你想在云函数(“onFinalize触发器”)中创建一个Firestore文档,其中包含其他信息(来自probe-image-size),一个签名的URL。
您可以通过Cloud Function获取签名URL,如下所示,而无需storageAccessToken:

exports.generateSignedURL = functions.storage.object().onFinalize(async object => {

    try {
        const bucket = admin.storage().bucket(object.bucket);
        const file = bucket.file(object.name);

        const signedURLconfig = { action: 'read', expires: '08-12-2025' };  // For example...

        const signedURLArray = await file.getSignedUrl(signedURLconfig);
        const url = signedURLArray[0];

        await admin.firestore().collection('signedURLs').add({ fileName: object.name, signedURL: url })
        return null;
    } catch (error) {
        console.log(error);
        return null;
    }

});

相关问题