首页 > 解决方案 > 以编程方式获取 Google Cloud Platform 自定义元数据“firebaseStorageDownloadToken”

问题描述

我正在使用 Firebase 云存储。

我知道如何使用在客户端 javascript 上运行的 Firebase SDK 函数获取下载文件 (tags.txt) 的 URL:

storage.ref('tags.txt').getDownloadURL().then((url) => {
      console.log(url);
    }); 

我想从 Node.JS 获取 downloadURL。我知道 Node.JS 不存在此功能

但是,在 Google Cloud Platform 中,您可以获得以下键/值对: firebaseStorageDownloadTokens : 0ea9a60a-7719-4c6b-9cb5-7fcf69d7c633,该值是您想要的令牌。通过这个令牌,我可以轻松地构建我需要的 downloadURL。

到达那里的路径是:

云存储/“存储桶名称”/存储桶详细信息/tags.txt/编辑元数据/自定义元数据。

我尝试使用此代码来访问此元数据:

async function getBucketMetadata() {

    const bucketName = "gs://tags.appspot.com";

    try {
        // Get Bucket Metadata
        let metadata = await admin.storage().bucket(bucketName).file('tags.txt').getMetadata();
        console.log(metadata)
    }

    catch (err) {
        console.log(err.message)
    }

} 

我得到了键/值(虽然不是真正的项目)信息,例如:

bucket:'tags.appspot.com'
contentType:'text/plain'
crc32c:'Y1Sdxw=='
etag:'CI1EETD18Co9vECEAE='
generation:'162694124484794756'
id:'tags-admin.appspot.com/tags.txt/162694431484794756'
kind:'storage#object'
md5Hash:'P1YSFER4xSf5p0/KWrdQWx1z1Lyg=='
mediaLink:'https://storage.googleapis.com/download/storage/v1/b/tags-admin.appspot.com/o/tags.txt?generation=162694443184794756&alt=media'
metageneration:'1'
name:'tags.txt'
selfLink:'https://www.googleapis.com/storage/v1/b/tags-admin.appspot.com/o/tags.txt'
size:'5211247'
storageClass:'STANDARD'
timeCreated:'2021-07-22T09:01:24.862Z'
timeStorageClassUpdated:'2021-07-22T09:01:24.862Z'
updated:'2021-07-22T09:01:24.862Z'

但没有关于我想要的键/值对:firebaseStorageDownloadTokens:0ea9a60a-7719-4c6b-9cb5-7fcf69d7c633

如果可以在 Google Cloud Platform 上看到键/值,我相信也可以通过一些代码访问键/值。

感谢您的帮助。

标签: javascriptgoogle-cloud-storagefirebase-storage

解决方案


我混淆了两个项目。我重新尝试了它,它的工作非常好。使用这种方法,我可以检索文件令牌并在后端围绕它构建文件 URL。不再需要前端函数 getDownloadURL()。

还是要谢谢你的帮助。

代码变为:

async function getBucketMetadata() {

    const bucketName = "gs://tags.appspot.com";

    try {
        // Get Bucket Metadata
        let metadata = await admin.storage().bucket(bucketName).file('tags.txt').getMetadata();
        console.log(metadata[0].metadata.firebaseStorageDownloadTokens)
    }

    catch (err) {
        console.log(err.message)
    }

}

推荐阅读