如何生成"下载URL"使用管理API的令牌,这就是我想要的吗?

时间:2018-05-08 19:01:52

标签: firebase firebase-storage firebase-admin

我正在尝试构建一个Firebase管理实用程序,我可以使用该实用程序将文件上传到Firebase存储,然后返回一个可存储在Firebase实时数据库中的长存URL来访问此文件。

我相信我可以在Firebase控制台中执行此操作,方法是转到我的项目控制台,点击左侧的Storage,然后点击Upload File。上传文件后,我可以通过选择列表中的文件来打开正确的信息窗格,然后展开File Location部分来获取URL。

在该部分中有一个Download URL,它似乎是一个包含某种类型标记的长期但可撤销的URL。此URL是否可以安全存储在数据库中以进行长期存储?它似乎与文件upload api返回的网址相同,另一个Google Codelab(Flutter)显示存储在实时数据库中。

但是,我无法弄清楚如何从Firebase Storage Management API生成这种类型的网址。我正在使用NodeJS,但它应该适用于所有版本的API AFAIK。我只能找到一个似乎没有返回相同网址的getSignedUrl来电,并且似乎有时间限制并且包含指向服务帐户的链接...而不是我想要存储在数据库中的内容。

let bucket = admin.storage().bucket();
bucket.upload('innovation3.jpeg', {destination: 'image_assets/innovation3.jpeg'},
  function(err, file) {
    file.getSignedUrl({action: 'read'},
    function(err, url) {
      console.log('Url: ' + url);
    })
  });

是否可以从Management API获取此URL,或者是否需要使用其他方法。推荐什么?

1 个答案:

答案 0 :(得分:1)

使用Firebase Admin SDK创建的签名网址(由Cloud Storage SDK支持)与Firebase客户端SDK创建的下载网址不同。它们具有相同的通用性,但您可以期望它们看起来彼此不同。它们都可以长期存储,除非您知道签名URL具有过期日期,您未在通话中指定。在这种情况下,我不知道有效的到期期限是什么。

每次调用getSignedUrl都会生成一个新的URL。文件中不仅有一个独特的文件。