【问题标题】:Fetch Azure blob metadata only if the blob exists仅当 blob 存在时才获取 Azure blob 元数据
【发布时间】:2019-01-10 01:40:39
【问题描述】:

我需要获取 Azure blob 的元数据(如果存在)并希望通过最少的 REST 调用(通过存储 SDK 到存储服务)来实现这一点

我知道我可以做类似的事情

  • CloudBlockBlob.ExistsAsync() 然后
  • CloudBlockBlob.FetchAttributesAsync() 如果 blob 存在

我尝试将这两个调用合并为一个

  • CloudBlockBlob.FetchAttributesAsync(AccessCondition.GenerateIfExistsCondition(),new BlobRequestOptions(), new OperationContext());

关于“AccessCondition.GenerateIfExistsCondition()”的文档说 -

构造一个访问条件,使得操作将 仅当资源存在时才执行。

但它仍然失败,找不到 404。

知道我想要实现的目标是否可能以及我可能做错了什么吗?

【问题讨论】:

    标签: c# azure azure-storage azure-blob-storage


    【解决方案1】:

    查看该操作的文档:https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-properties

    它基本上是对 blob 的 HEAD 请求,并且没有提到标头的 If-Match 等。

    所以我认为最好的方法就是调用 FetchAttributesAsync。 如果这导致 404,则该 blob 不存在。 它只执行 1 个 HTTP 请求。

    【讨论】:

    • 需要将其包装在 try catch 中。希望尽可能避免产生异常?
    • 对,那确实不错。如果您可以告诉 Storage SDK 不要抛出,但如果找不到则返回 null 等等。
    • 我确实检查了反编译的代码。它添加了值为“*”的 if-match 标头。不知道服务器是如何处理的
    • 可以指定 AccessCondition,如果您已获得 blob 的租约,则可以指定 租约 id
    猜你喜欢
    • 2021-06-22
    • 2018-05-07
    • 2019-12-16
    • 1970-01-01
    • 2020-02-14
    • 2017-09-16
    • 2015-11-04
    • 2019-09-15
    • 2013-10-22
    相关资源
    最近更新 更多