gpt4 book ai didi

c# - 检查 URL 是否指向 Azure Blob

转载 作者:行者123 更新时间:2023-11-30 16:44:49 25 4
gpt4 key购买 nike

如果我有一个随机 URL,我如何检查它是否指向 Azure 中的 blob?如果它指向 Azure Blob,我可以确定该 Blob 存在并且我可以访问它。
我尝试了以下方法:

  1. 我用 Exists 做了一些测试,但不是很令人满意:

    new CloudBlockBlob(new Uri("http://example.com"))
    ArgumentException: Invalid blob address 'http://example.com/', missing container information

    new CloudBlockBlob(new Uri("https://example.com/fdh/3746C9A2-533E-4544-A10B-321A8BC40AEA/sample-file.txt")).Exists()
    false

    new CloudBlockBlob(new Uri("http://stackoverflow.com/questions/43109843/ways-to-migrate-documents-pdf-forms-from-ms-sharepoint-to-aem")).Exists()
    StorageException: Blob type of the blob reference doesn't match blob type of the blob.

    所以基本上创建了 CloudBlockBlob可能会失败,Exists可能会失败或返回false .

    但这样做感觉不对。

  2. 我可以检查网址为 https://<storage-account>.blob.core.windows.net/<container>/* ,但我不确定这是否总是正确的。

如果我能保证 2. 有效,我会这样做,因为不需要 HTTP 请求。

是否有其他(更好)的方法来检查随机 URL 是否指向 Azure 中的 blob(可能是(Azure 存储 SDK)框中的某些内容)?

最佳答案

并不是一个真正优雅的解决方案(阅读,这基本上是一个黑客:D)

您可以做的一件事是向 URL 发出 HEAD 请求。您需要做的是解析响应 header 。您需要考虑 3 种情况:

  1. URL 指向 Blob 存储中的 Blob,并且可公开访问。
  2. URL 指向 Blob 存储中的 Blob,但不可公开访问(容器是私有(private)的)。
  3. URL 未指向 Blob 存储。

现在,对 Azure Blob 存储的每个请求都会有一个名为 x-ms-request-id 的响应 header ,其中包含类似 GUID 的值。您可以使用它来区分 URL 指向 Blob 存储和 URL 不指向 Blob 存储的情况。当然,此检查将会失败(这就是为什么如果 URL 实际上返回此 header ,则该解决方案更像是“黑客”[某些随机站点决定在响应中包含此确切 header ])。

在情况 #1 中,您将收到状态代码 200。由于该 blob 是可公开访问的,因此您将获得额外的 header 。其中 header 之一为 x-ms-blob-type,并且可能有 3 个值:BlockBlobAppendBlob页面Blob

在情况 #2 中,您将收到状态代码 404,但您将收到 x-ms-request-id 响应 header 。

关于c# - 检查 URL 是否指向 Azure Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43110294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com