Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当资源不可用时才允许写入';Firebase存储上已不存在_Firebase_Firebase Storage - Fatal编程技术网

仅当资源不可用时才允许写入';Firebase存储上已不存在

仅当资源不可用时才允许写入';Firebase存储上已不存在,firebase,firebase-storage,Firebase,Firebase Storage,我正在尝试设置Firebase安全规则,仅当同名文件不存在时才允许上载文件。理想情况下,我希望在新文件的内容与现有文件相同时支持重写文件 我尝试了以下方法: allow write: if !resource; 及 及 但两者似乎都不起作用。他们所做的只是不允许任何上传。我认为您需要以下组合: service firebase.storage { match /b/<your-bucket>/o { match /path/to/file { // !res

我正在尝试设置Firebase安全规则,仅当同名文件不存在时才允许上载文件。理想情况下,我希望在新文件的内容与现有文件相同时支持重写文件

我尝试了以下方法:

allow write: if !resource;


但两者似乎都不起作用。他们所做的只是不允许任何上传。

我认为您需要以下组合:

service firebase.storage {
  match /b/<your-bucket>/o {
    match /path/to/file {
      // !resource allows the upload of a new file
      // hash comparison allows re-upload of the same file
      allow write: if !resource || request.resource.md5hash == resource.md5hash;
    }
  }
}
service firebase.storage{
匹配/b//o{
匹配/path/to/file{
//!resource允许上载新文件
//哈希比较允许重新上载同一文件
允许写入:if!resource | | request.resource.md5hash==resource.md5hash;
}
}
}

改用
资源==null

文档中确实缺少这一点,但在md5注释下:

注意:MD5哈希冲突是可能的,并且可能允许某人覆盖文件,即使存在类似上述规则。考虑附加文件验证或其他规则来强制不可变(例如:代码>允许写入:如果资源=null;< /代码>)


谢谢你,迈克!我尝试了你的建议,但在我应用这些规则后,我仍然会为我尝试上传的每个文件获取HTTP403。当我使用
allow write时,它确实允许我上传。我偶尔也会收到HTTP 500的消息:“检索安全规则失败”!资源也给了我一个问题。!资源失败,错误资源==null对我有效
allow write: if request.resource.md5hash == resource.md5hash;
service firebase.storage {
  match /b/<your-bucket>/o {
    match /path/to/file {
      // !resource allows the upload of a new file
      // hash comparison allows re-upload of the same file
      allow write: if !resource || request.resource.md5hash == resource.md5hash;
    }
  }
}