【问题标题】:Azure CloudBlockBlob.DeleteIfExists() - Does false always mean the blob doesn't exist?Azure CloudBlockBlob.DeleteIfExists() - false 是否总是意味着 blob 不存在?
【发布时间】:2018-06-14 18:27:11
【问题描述】:

我知道 CloudBlockBlob.DeleteIfExists() 如果 blob 存在则返回 true,否则返回 false。

但是我很想知道如果 blob 确实存在会发生什么,但 Azure 中出现问题导致文件删除不会发生(我找不到关于该行为的任何文档)。

我担心它会返回 false 而不是抛出某种异常,所以我相信当它实际上仍然存在时,该 blob 已被删除。

简而言之,如果我得到一个 false back 的值,是否 总是 意味着 blob 不存在,不需要删除,我会如果 Azure 端出现问题,是否会出现某种异常?

谢谢。

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

    查看此方法here 的源代码,如果blob 被删除,您将获得true,如果blob(或blob 容器)不存在,您将获得false。在所有其他情况下(例如 blob 已租用,因此无法删除),将引发异常。以下是相关代码:

        public virtual bool DeleteIfExists(DeleteSnapshotsOption deleteSnapshotsOption = DeleteSnapshotsOption.None, AccessCondition accessCondition = null, BlobRequestOptions options = null, OperationContext operationContext = null)
        {
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.Unspecified, this.ServiceClient);
            operationContext = operationContext ?? new OperationContext();
    
            try
            {
                this.Delete(deleteSnapshotsOption, accessCondition, modifiedOptions, operationContext);
                return true;
            }
            catch (StorageException e)
            {
                if (e.RequestInformation.HttpStatusCode == (int)HttpStatusCode.NotFound)
                {
                    if ((e.RequestInformation.ExtendedErrorInformation == null) ||
                        (e.RequestInformation.ExtendedErrorInformation.ErrorCode == BlobErrorCodeStrings.BlobNotFound) ||
                        (e.RequestInformation.ExtendedErrorInformation.ErrorCode == BlobErrorCodeStrings.ContainerNotFound))
                    {
                        return false;
                    }
                    else
                    {
                        throw;
                    }
                }
                else
                {
                    throw;
                }
            }
        }  
    

    【讨论】:

      【解决方案2】:

      我知道 CloudBlockBlob.DeleteIfExists() 如果 blob 存在则返回 true,否则返回 false。

      如果 blob 存在并且可以删除,则返回 true。 如果 blob 不存在,那么它将返回 false。

      简而言之,如果我得到一个 false back 的值,是否总是意味着 blob 不存在

      不,如果 blob 存在并且我们不能删除它,那么也会返回 false 和异常。我在我身边测试它。如果 blob 被租用,并且我们尝试删除它,那么我们将得到 false 和 412 异常。 更多详细信息可以参考截图。

      【讨论】:

      • 如果您要删除 Azure 中存在的 blob,则您已传入 url blob。在 Azure 中上传的文件的完整路径,但您传递的是文件的本地路径。
      • 不可能“异常返回false”。如果找不到目标 blob,将返回 False。异常将在错误的情况下发生。但不是两者都在同一时间。请参阅 Stopped Contributing 的好答案。
      猜你喜欢
      • 2010-11-28
      • 2014-08-15
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      相关资源
      最近更新 更多