我有一个功能,可以将图像成功上传到我的云存储桶。
使用其他功能我想获取图片的网址以在我的页面上显示(使用<img.../>
)
getImageUrl(id: string) {
return this.storageRef.child('X/' + id ).getDownloadURL();
但是当我这样做时...我得到一个'无效'的网址,当我复制网址并转到它时,我收到以下消息:
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}
我在某处读到这可能是因为URL中没有附加令牌,但我该如何启用它呢?
答案 0 :(得分:5)
最近几天,我一直在尝试了解Firebase Storage规则,但我不知道为什么,但是当我分开编写和阅读这样的规则时,例如:
allow write: if request.auth != null && request.resource.size < 3 * 1024 * 1024;
allow read: if true;
该代码很好用,我可以使用getDownloadURL()进行读写,但是当我像这样一起使用它们时:
allow read, write: if request.auth != null && request.resource.size < 3 * 1024 * 1024;
我和你有同样的错误:
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}
将它们一起使用时我可以写,但是当我尝试使用getDownloadURL()读取文件时,就会出现问题。也许您可以尝试按我提到的方法将规则分开,看看是否可行。我希望它能解决您的问题。另外,请不要忘记,自设置规则起5分钟后规则就生效了。祝好运。
答案 1 :(得分:2)
您必须设置存储安全规则,详细了解此here
答案 2 :(得分:2)
我的项目遇到了类似的问题,如果有人仍在挣扎,则必须从Firebase控制台为Cloud Storage提供适当的规则。 结帐this链接可获取角色的完整详细信息。
如果要在存储上上传任何对象,则需要在Firebase控制台>存储>规则下添加write
规则。
答案 3 :(得分:1)
仅对图像使用此规则
service firebase.storage {
match /b/{bucket}/o {
match /images/{imageId} {
// Only allow uploads of any image file that's less than 5MB
allow write: if request.resource.size < 5 * 1024 * 1024
&& request.resource.contentType.matches('image/.*');
}
}
}
答案 4 :(得分:0)
您需要使用getDownloadURL()方法。这将为您提供用于访问实际图像的URL,以便在您自己的html中下载或引用。
请参阅以下参考文档:
https://firebase.google.com/docs/storage/web/download-files#download_data_via_url
答案 5 :(得分:0)
您需要使用getDownloadURL方法。这将允许您获取下载图像所需的URL或在您自己的html中进行参考。
请参阅以下参考文档:
https://firebase.google.com/docs/storage/web/download-files#download_data_via_url
答案 6 :(得分:0)
我能够通过将FirebaseStorage安全规则从默认更改为以下来解决此问题:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if true;
}
}
}
答案 7 :(得分:0)
我在访问我的 iOS 项目中的存储文件时遇到了同样的问题。我没有任何自定义安全规则。只是配置中的默认值。打破规则换行很有帮助!
.content {
position: absolute;
width: 100%;
height: 100%;
background-color: red;
}
我不知道这是否是一些 firebase 错误,但它有帮助:)