如何在Firebase函数中获取Firebase生成的下载URL

10 浏览
0 Comments

如何在Firebase函数中获取Firebase生成的下载URL

这个问题已经有了答案

获取使用Firebase Cloud Functions上传的文件的下载URL

我使用Flutter的Firebase sdk上传了图片,在Flutter端,我通常只需要在引用上调用getDownloadUrl()函数,然后我想在我的Cloud Function触发器中获取该URL,如果图片被上传到Firebase Storage中,我将获得下载URL并在firestore上发布它。

我尝试获取媒体链接的元数据,但它不是我可以手动从浏览Firebase存储控制台中找到的相同URL。

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访问Google Cloud Storage对象”的错误。

如何获取这个生成的链接,我们可以在firebase storage控制台上找到它。

\"enter

admin 更改状态以发布 2023年5月23日
0
0 Comments

我理解在 Cloud Function 被触发时,有一个新文件被上传到 Cloud Storage,你想获取这个文件的签名 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;
    }
});

我们使用 Cloud Storage Node.js 客户端 API 中的 getSignedUrl() 方法。在文档中,你会找到更多关于传递给该方法的配置对象 (在上面的示例中,即 signedURLconfig) 的可能属性和值的详细信息。

0