我想显示保存在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;
}
}
}
还有另一种不用签名网址的方法,因为我认为这是错误的根源
答案 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。您甚至可以公开整个存储桶,以便用户自由读取其所有内容。