在node.js中创建Firebase存储访问令牌

在node.js中创建Firebase存储访问令牌,node.js,google-cloud-functions,google-cloud-storage,firebase-storage,Node.js,Google Cloud Functions,Google Cloud Storage,Firebase Storage,基本上,我有两种将文件上载到firebase存储的方法: 前端使用图像url调用后端,后端下载图像并通过bucket.upload上传(我喜欢,因为我可以设置storageAccessToken) 用户使用在后端生成的签名url直接通过前端上传。(我不喜欢它,因为我无法设置storageAccessToken) 我有一个onFinalize触发器,每次在firebase存储中存储新对象时都会调用它。 在此触发器中,我想为添加的特定对象创建firestore文档。 为了获取我使用的文件信息。 问题

基本上,我有两种将文件上载到firebase存储的方法:

  • 前端使用图像url调用后端,后端下载图像并通过bucket.upload上传(我喜欢,因为我可以设置storageAccessToken)
  • 用户使用在后端生成的签名url直接通过前端上传。(我不喜欢它,因为我无法设置storageAccessToken)
  • 我有一个onFinalize触发器,每次在firebase存储中存储新对象时都会调用它。
    在此触发器中,我想为添加的特定对象创建firestore文档。
    为了获取我使用的文件信息。
    问题是,我需要该文件的下载链接,如果没有storageAccessToken,就我所知,我无法下载该文件


    基本上,问题是:我可以在onFinalize触发器中添加storageAccessToken,还是在我通过前端上传带有签名的文件时添加storageAccessToken?

    如果我正确理解您的问题,您会希望在云函数(
    onFinalize
    trigger”)中创建一个Firestore文档,其中包含,在其他信息中(来自
    探测图像大小
    ),有签名的URL

    您可以通过云函数获得签名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;
        }
    
    });
    

    谢谢,我试过了,对于我的用例来说,这似乎是一种可行的方法。显示与Renaud Responsed相同,同时显示如何获得Firebase SDK创建的实际下载URL。