如何从谷歌存储加载文件

时间:2019-10-02 08:40:07

标签: firebase google-cloud-platform google-cloud-storage

我想显示保存在Google存储空间中的图片以及保存在数据库中的URL或PATH。

我使用云功能在存储桶中创建文件

bucket.upload(thumbPath, {
      destination: join(bucketDir, thumbName),
    });

然后我创建一个singnedUrl

const config = {
    action: 'read',
    expires: '03-01-2500',
  };
  const result = await thumbFile.getSignedUrl(config);

并将其保存在我的数据库中

我希望能够始终使用保存的URL加载图像。 这个工作大约一周。但随后出现403错误。

我的存储规则为:

service firebase.storage {
  match /b/{bucket}/o {
   match /{allPaths=**} {
     allow read: if true;
     allow write: if request.auth != null;
   }
  }
}

还有另一种不用签名网址的方法,因为我认为这是错误的根源

1 个答案:

答案 0 :(得分:3)

请注意,如果您签名的URL在大约7天后过期,则可能是因为您使用的是V4 signing API(或者getSignedUrl()方法正在调用此API)。来自documentation

  

X-Goog-Expires:签名的URL保持有效的时间长度,   从X-Goog-Date中的值开始测量的秒数。在这个例子中   签名的URL将在15分钟后过期。最长的到期值为   604800秒(7天)。

另一方面,V2签名(您可以检查this documentation)对生成的Signed URL的到期日期没有限制。

我不确定您要使用哪个库来调用getSignedUrl()函数,但是我怀疑它已更新并将签名方法从V2更改为V4,现在存在以下限制:生成的签名URL的7天。如果您想继续使用它们,也许回滚到该库的先前版本会有所帮助,或者您可以直接调用V2 API生成URL。

无论如何,如果您想使用另一种方法,可能最直接的方法就是将存储桶中的文件公开,请参见documentation here。您甚至可以公开整个存储桶,以便用户自由读取其所有内容。