强制 Etag 检查 Blob 创建
Forcing Etag check on Blob creation
有没有办法在第一次将数据上传到 blob 时(当 blob 不存在时)强制执行 Etag AccessCondition 检查?
我有多个不同的服务器在更新同一个 blob。
当 blob 已经存在时,在写入时强制执行 Etag AccessCondition 非常容易,而且效果很好。
我不能做的是在 blob 创建时强制执行 Etag 检查。
- 如果我在第一次创建 blob 时将 string.Empty 或 null 作为 Etag AccessCondition 传递,则它对所有模式都是免费的。基本上任何尝试写入 blob 的服务器都会成功,无论它实际上创建了 blob 还是 erased/overwrote blob 的先前内容。
- 显然我无法获取不存在的 blob 的 FetchProperties(),因此没有初始状态 Etag。
- 当 Blob 仍然不存在时将任何非空字符串作为 Etag 传递总是无法通过前提条件检查。
所以基本上这里是需要的两个访问条件:
- 如果 blob 不存在使用:
AccessCondition.GenerateIfNoneMatchCondition("*")
- 如果 blob 确实存在,请使用:
AccessCondition.GenerateIfMatchCondition(_etag)
"*"(星号字符)是 Azure 使用的特殊通配符字符串。条件 #1 表示只要资源根本没有 Etag 值就应该执行操作(只有在资源不存在时才有可能)。
有没有办法在第一次将数据上传到 blob 时(当 blob 不存在时)强制执行 Etag AccessCondition 检查?
我有多个不同的服务器在更新同一个 blob。 当 blob 已经存在时,在写入时强制执行 Etag AccessCondition 非常容易,而且效果很好。
我不能做的是在 blob 创建时强制执行 Etag 检查。
- 如果我在第一次创建 blob 时将 string.Empty 或 null 作为 Etag AccessCondition 传递,则它对所有模式都是免费的。基本上任何尝试写入 blob 的服务器都会成功,无论它实际上创建了 blob 还是 erased/overwrote blob 的先前内容。
- 显然我无法获取不存在的 blob 的 FetchProperties(),因此没有初始状态 Etag。
- 当 Blob 仍然不存在时将任何非空字符串作为 Etag 传递总是无法通过前提条件检查。
所以基本上这里是需要的两个访问条件:
- 如果 blob 不存在使用:
AccessCondition.GenerateIfNoneMatchCondition("*")
- 如果 blob 确实存在,请使用:
AccessCondition.GenerateIfMatchCondition(_etag)
"*"(星号字符)是 Azure 使用的特殊通配符字符串。条件 #1 表示只要资源根本没有 Etag 值就应该执行操作(只有在资源不存在时才有可能)。