GetBlobReferenceFromServer不使用相对URI。错误:“只允许使用绝对地址”

时间:2014-05-23 11:32:46

标签: .net vb.net azure azure-storage azure-storage-blobs

我正在将Azure存储从1.7 SDK升级到2.3 SDK并且一直在更新GetBlobReference(string)GetBlockReferenceFromServer(Uri)的调用

过去我一直在使用相对URI,但是当我将它们传递给GetBlockReferenceFromServer时,我收到的错误是我不能使用绝对URI(参见下面的堆栈)

示例代码:

Dim myAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)
Dim myClient As CloudBlobClient = myAccount.CreateCloudBlobClient()
Dim myRelativeUri As New Uri("mycontainer/myblob.txt", UriKind.Relative)
Dim myBlobref As ICloudBlob = myClient.GetBlobReferenceFromServer(myRelativeUri) <- Errors on this line

错误堆叠:

System.ArgumentException: Address 'mycontainer/myblob.txt' is a relative address. Only absolute addresses are permitted.Parameter name: uri   
at Microsoft.WindowsAzure.Storage.StorageUri.AssertAbsoluteUri(Uri uri)   
at Microsoft.WindowsAzure.Storage.StorageUri.set_PrimaryUri(Uri value)   
at Microsoft.WindowsAzure.Storage.StorageUri..ctor(Uri primaryUri, Uri secondaryUri)   
at Microsoft.WindowsAzure.Storage.StorageUri..ctor(Uri primaryUri)   
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer(Uri blobUri, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)   at MySoftware.MyReference...

我不明白为什么当CloudBlobClientBaseUri工作时,Uri必须是绝对的。在尝试获取参考之前,是否必须先手动添加BaseUri

technical reference中没有任何关于此的内容。

是否有人使用相对URI来使用GetBlobReferenceFromServer?有什么东西我从根本上做错了吗?

1 个答案:

答案 0 :(得分:10)

感谢您的反馈。 GetBlobReferenceFromServer需要绝对URI,因为它是为特定场景设计的,其中用户只有一个blob的URI,并且需要让它的blob类型甚至开始使用它。

如果您知道blob的类型,我强烈建议使用GetContainerReference,然后使用GetBlockBlobReference或GetPageBlobReference,因为这些方法不必调用Azure存储服务来获取blob类型。因此,它们可以降低成本并提高性能。它们也直接与blob名称一起工作,而不是URI。