强制Etag检查Blob创建

时间:2015-01-03 16:22:09

标签: c# azure concurrency blob etag

第一次将数据上传到blob时是否有办法强制执行Etag AccessCondition检查(当blob不存在时)?

我有多个不同的服务器更新相同的blob。 当blob已经存在时,很容易在写入时强制执行Etag AccessCondition并且工作正常。

我不能做的是在blob创建时强制执行Etag检查。

  • 如果我在第一次创建blob时传递string.Empty或null作为Etag AccessCondition,那么它对所有模式都是免费的。基本上任何尝试写入blob的服务器都会成功,无论它是否实际创建了blob,或者只是删除/覆盖了blob的先前内容。
  • 我无法显示不存在的blob的FetchProperties(),因此没有初始状态Etag。
  • 当Blob仍然不存在时,将任何非空字符串作为Etag传递总是在前置条件检查时失败。

1 个答案:

答案 0 :(得分:0)

在这里找到解决方案: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a02ff6ab-dceb-4955-908b-7e39137e4774/concurrent-upload-to-azure-blob-using-same-key?forum=windowsazuredata

所以基本上这里需要两个AccessConditions:

  1. 如果blob不存在,请使用:AccessCondition.GenerateIfNoneMatchCondition("*")
  2. 如果blob确实存在,请使用:AccessCondition.GenerateIfMatchCondition(_etag)
  3. “*”(星号字符)是Azure使用的特殊通配符字符串。条件#1表示只要资源根本没有Etag值,就应该执行操作(仅当资源不存在时才可以执行)。