当前位置: 首页 > 知识库问答 >
问题:

如何在firebase函数上获得firebase生成的下载url[重复]

糜运良
2023-03-14

我在Flutter上使用Firebase sdk上传了图像,在Flutter上,我通常只需调用引用上的getDownloadUrl(),然后我想在云函数触发器上获得该url,所以如果图像上传到Firebase存储上,我将获得下载url并将其发布到FireStore上。

我已经尝试获取元html" target="_blank">数据mediaLink,但它不是相同的url,我可以从浏览firebase存储控制台手动找到。

exports.generateThumbnail = functions.storage.object().onFinalize(async (object) => {
    const db = admin.firestore();
    const filePath = object.name;
    const contentType = object.contentType; 
    const fileDir = path.dirname(filePath);
    const fileName = path.basename(filePath);
    
    const jobId = fileName.replace("poster_","").replace(".png","");
    const bucket = admin.storage().bucket(object.bucket);
    const file = bucket.file(filePath);
    const posterMetadata = await file.getMetadata();
    const posterFileUrl = posterMetadata[0].mediaLink;
    return functions.logger.log('url: '+posterFileUrl );
}

使用该url,我得到了“匿名调用者没有Storage.objects.Get access to the Google Cloud Storage对象”。错误,

如何获得这个生成的链接,我们可以在firebase存储控制台找到

共有1个答案

司徒俊健
2023-03-14

我明白,在一个新文件上传到云存储时触发的云函数中,您希望获得该文件的签名URL。

以下内容将实现这一技巧:

exports.generateFileURL = 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: '01-01-2030' };

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

        // Do whatever you want with the signed URL
        // e.g. save it to Firestore

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

});

我们使用云存储Node.js客户机API中的getSignedurl()方法。您将在文档中找到更多关于传递给方法的配置对象的可能属性和值的详细信息(例如,上面示例中的signedurlconfig)。

 类似资料:
  • 如何获得下载URL? 我有点糊涂了。现在,我被困在修改后的功能更新。下面是我对管理的初始化。

  • 我将两张“用户选择的”图片上传到firebase存储区,并将它们的URL保存到firestore,但是URL保存指向的只是其中一张图片,尽管它们看起来并不相同。有一个类似的问题,但是关于swift的,它没有回答我的问题,这里是这个问题的URL。从多个文件上传firebase存储获取下载url 我试着用ref.getDownloadURL()获取下载链接,但这给出了错误的URL,TaskSnapsh

  • 正如代码中所解释的那样,我需要这样做来防止连续两次更新项目照片的情况,因为第一次更新太快而无法完成上传。我最终得到了2个文件-其中一个没有从任何地方引用。如果我可以做类似的事情,第二次上传将转到我的“更新”情况(而不是这里提供的“新照片”情况)-在那里文件将被正确地切换。

  • 我想从FireBase的方法获取下载Url。如何使用以下代码获取下载Url? 我使用了,但这不起作用。

  • 在Java Spring Boot中,我可以使用firebase admin sdk获取已签名的url。 但是我需要在JavaSpring Boot中获得下载url而不是签名url,如下面的代码所示。 我无法在JavaSpring中添加Firebase存储sdk,只能移动。 https://mvnrepository.com/artifact/com.google.firebase/firebas

  • 我试图构建一个仅当源URL位于allowlist上时才执行逻辑的应用程序。我正在尝试使用以下方法获取Firebase函数内部的源URL: 我试图从这个堆栈溢出帖子中使用这些: 所有返回未定义。 我试图从堆栈溢出帖子中整合此函数: 这返回我的云函数的基本url 我真正想看到的是发布文章的url。我用这个来写这篇文章,所以我希望看到: