检查是否存在未知Blob类型的Blob

时间:2015-08-18 16:09:09

标签: azure azure-storage

我已经继承了使用Azure存储客户端1.7构建的项目,并且正在进行升级,因为微软宣布将从今年12月起不再支持该项目。

对Blob存储中文件的引用存储在具有以下字段的数据库中:

  1. FilePath - uploadfiles/xxx/yyy/Image-20140117170146.jpg

  2. 形式的字符串
  3. FileURI - https://zzz.blob.core.windows.net/uploadfiles/xxx/yyy/Image-20140117170146.jpg

  4. 形式的字符串 如果文件不存在,

    GetBlobReferenceFromServer将抛出异常,因此如果您知道容器和Blob类型,则应该使用GetBlockBlobReference

    所以我的问题:

    • 我可以假设当前上传的任何Blob(使用StorageClient 1.7)都是BlockBlobs吗?
    • 由于我需要知道要调用GetBlockBlobReference的容器名称,我可以可靠地说,在上面的示例中,我的容器始终是uploadfiles

1 个答案:

答案 0 :(得分:1)

  

我可以假设当前上传的任何Blob(使用StorageClient 1.7)   会是BlockBlobs吗?

虽然您无法100%确定通过Storage Client库1.7上传的blob是Blob Blobs,因为1.7也支持Page Blobs,但您可以进行一些智能猜测。例如,如果文件是图像文件和其他常用文件(pdf,文档等),则可以假设它们是块blob。通常,您会看到vhd文件作为页面blob上传。如果这些是由您的应用程序的用户上传的,那么它们很可能是块blob。

话虽如此,我认为你应该使用GetBlobReferenceFromServer方法。您可以做的是列出数据库中的所有blob,并为每个blob调用GetBlobReferenceFromServer方法。如果blob存在,那么您将获得blob类型。如果blob不存在,此方法将给您一个错误。这将是识别数据库中现有条目的blob类型的最快方法。如果需要,如果在检查blob类型时发现块和页面blob,则可以将blob类型与现有记录一起存储在数据库中,以便将来需要在创建CloudBlockBlobCloudPageBlob引用,您可以查看此字段。

  

因为我需要知道调用GetBlockBlobReference的容器名称   我可靠地说,在上面的例子中,我的容器总是如此   uploadfiles

是。在上面列出的示例中,您可以说blob容器为upload files