检查块blob存在失败

时间:2014-07-31 14:07:04

标签: c# azure-storage azure-storage-blobs

我使用Azure存储在Azure平台上存储一些文件,使用WindowsAzure.Storage Nuget包的新版本4.X与存储进行交互。

我使用带有SAS密钥的完整uri连接到我的容器:

var uri = new Uri("https://mystorage.blob.core.windows.net/mycontainer?sr=c&si=all-rights&sig=mykey");
var container = new CloudBlobContainer(uri);

策略"所有权利" 在Azure存储中配置,并为我提供容器的所有权利。

上传文件效果很好

var myBlob = container.GetBlockBlobReference("desert.jpg");
myBlob.UploadFromFile(@"path\to\desert.jpg", FileMode.OpenOrCreate);

当我尝试检查blob存在时:

var blob = container.GetBlockBlobReference("desert.jpg");
var exists = blob.Exists();

当它命名为" desert.jpg"不存在,但是当blob存在时我得到一个例外:

  

Microsoft.WindowsAzure.Storage.StorageException:blob引用的Blob类型与blob的blob类型不匹配。 ---> System.InvalidOperationException:blob引用的Blob类型与blob的blob类型不匹配。      在Microsoft.WindowsAzure.Storage.Blob.CloudBlobSharedImpl.UpdateAfterFetchAttributes(BlobAttributes属性,HttpWebResponse响应,布尔值ignoreMD5)      在Microsoft.WindowsAzure.Storage.Blob.CloudBlobSharedImpl。<> c__DisplayClasse.b__d(RESTCommand 1 cmd, HttpWebResponse resp, Exception ex, OperationContext ctx) at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand 1 cmd,IRetryPolicy策略,OperationContext operationContext)      ---内部异常堆栈跟踪结束---      在Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync [T](RESTCommand`1 cmd,IRetryPolicy policy,OperationContext operationContext)      在Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.Exists(布尔值primaryOnly,BlobRequestOptions选项,OperationContext operationContext)      在Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.Exists(BlobRequestOptions选项,OperationContext operationContext)      位于c:\ Users \ RMagny \ Documents \ Visual Studio 2012 \ Projects \ AzureStorage \ AzureStorage \ Program.cs中的AzureStorage.Program.Main():第16行   请求信息   请求ID:8ab1351a-1c66-4193-ad54-bbcaf2a20132   RequestDate:星期四,2014年7月31日13:54:20 GMT   StatusMessage:确定

使用最新版本的库检查blob存在是否正确?

当我使用Nuget包的前一个3.2.1版本时,我编写了这种代码,并且它运行得很好。

我不知道我是否面临图书馆中的错误,或者是否有新的范例可供使用。

顺便说一句,似乎我对获取/设置blob属性的所有方法都有同样的问题(方法SetProperties()FetchProperties()

1 个答案:

答案 0 :(得分:3)

问题是由SAS令牌的生成方式引起的。它不包含sv参数,该参数会导致使用非常旧的Azure Storage Services版本处理请求。每个版本的Azure存储客户端库都与特定版本的Azure存储服务绑定,这会导致您遇到的问题。有关版本控制的更多信息,请参阅Versioning for the Azure Storage Services

我建议您使用Azure存储客户端库或使用您最喜欢的资源管理器应用程序的较新版本来升级到较新的SAS令牌版本。