强制在创建 Blob 时检查 Etag

本文关键字:检查 Etag Blob 创建 | 更新日期: 2023-09-27 18:36:15

有没有办法在第一次将数据上传到 blob 时强制执行 Etag 访问条件检查(当 blob 不存在时)?

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

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

  • 如果我传递字符串。空或空作为 Etag 访问条件当我第一次创建 blob 时,然后它对所有模式都是免费的。基本上,任何尝试写入 blob 的服务器都将始终成功,无论它实际创建了 blob 还是只是擦除/覆盖了 blob 的先前内容。
  • 显然,我无法获取不存在的blob的属性(),因此没有初始状态Etag。
  • 当 Blob 仍不存在时,将任何非空字符串作为 Etag 传递始终在前提条件检查时失败。

强制在创建 Blob 时检查 Etag

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

所以基本上这里有两个需要的访问条件:

  1. 如果 Blob 不存在,请使用:AccessCondition.GenerateIfNoneMatchCondition("*")
  2. 如果 Blob 确实存在,请使用:AccessCondition.GenerateIfMatchCondition(_etag)

"*"(星号字符)是 Azure 使用的特殊通配符字符串。条件 #1 表示只要资源根本没有 Etag 值,就应该执行操作(这仅在资源不存在时才可能)。