检查URL是否指向Azure Blob

4

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

  1. I made some tests with Exists, but it's not very satisfying:

    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.
    

    So basically creating the CloudBlockBlob can fail, Exists can fail or return false.

    But it just feels wrong to do it like this.

  2. I could check the url to be https://<storage-account>.blob.core.windows.net/<container>/*, but I'm not sure if this is always correct.

如果我能保证2.的有效性,我会这样做,因为不需要进行任何HTTP请求。
是否有其他(更好的)方法来检查随机URL是否指向Azure中的Blob(也许是(Azure Storage SDK)盒子之外的东西)?

发起网络请求是一个选项吗? - Gaurav Mantri
当然可以,只要它能完成任务,任何请求都可以。 - Johannes Egger
如果它是一个私有容器并且/或者您没有指定正确的凭据,它也可能失败。 - user585968
好的,如果我有一个指向 Azure Blob 的 URL,我可以确定它存在,并且我可以访问它(已更新帖子)。 - Johannes Egger
1个回答

2

并不是一个优雅的解决方案(也就是说,基本上是一种hack :D)

你可以做的一件事情是对该URL进行HEAD请求。你需要做的是解析响应头。有三种情况需要考虑:

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

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

在情况#1中,您将收到状态码200。因为Blob是公开访问的,您将得到其他头文件。其中之一是x-ms-blob-type,它可能具有3个值:BlockBlobAppendBlobPageBlob

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


没错,这是一个hack :-),但无论如何还是很有趣的。谢谢。 - Johannes Egger
我在过去的一年左右使用了这种方法,效果非常好。请注意,您也可能会收到401未经授权的错误提示。 - yonisha
@yonisha 我认为对于 Blob 存储,你永远不会收到 401 状态码。你能否解释一下在什么情况下会收到 401? - Gaurav Mantri
@GauravMantri,抱歉我是指403。当使用无效的SAS令牌时,Azure会返回“403服务器未能验证请求。请确保Authorization标头的值正确形成,包括签名”。使用有效SAS创建Blob URL并更改SAS将导致此错误。 - yonisha
@yonisha...是的,403错误肯定可以出现在许多情况下。但即使在这种情况下,您也会收到x-ms-request-id头。 - Gaurav Mantri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接