Firebase云存储:权限被拒绝。检索downloadURL时无法执行此操作firebase

时间:2018-05-20 08:28:18

标签: angular firebase firebase-storage

我有一个功能,可以将图像成功上传到我的云存储桶。

使用其他功能我想获取图片的网址以在我的页面上显示(使用<img.../>

getImageUrl(id: string) {
    return this.storageRef.child('X/' + id ).getDownloadURL();

但是当我这样做时...我得到一个'无效'的网址,当我复制网址并转到它时,我收到以下消息:

{
  "error": {
    "code": 403,
    "message": "Permission denied. Could not perform this operation"
  }
}

我在某处读到这可能是因为URL中没有附加令牌,但我该如何启用它呢?

8 个答案:

答案 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 错误,但它有帮助:)