首页 > 解决方案 > 如何从谷歌存储加载文件

问题描述

我想显示保存在谷歌存储中的图像,其中包含保存在我的数据库中的 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;
   }
  }
}

是否有另一种不使用签名 URL 的方法,因为我认为这是错误的根源

标签: firebasegoogle-cloud-platformgoogle-cloud-storage

解决方案


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

X-Goog-Expires:签名 URL 保持有效的时间长度,以 X-Goog-Date 中的值计算,以秒为单位。在此示例中,签名 URL 将在 15 分钟后过期。最长过期值为 604800 秒(7 天)。

另一方面,V2 签名(您可以查看此文档)对生成的签名 URL 的到期日期没有限制。

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

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


推荐阅读