2014-11-06 30 views
0

我有一堆在azure存储上的blob,它遵循以下模式中的名称:<someName>_DateTimeOffset.UtcNow。当我使用container.ListBlobs()获取blob时,blob Uri如下所示:<someName>__11%252f3%252f2014+10%253a00%253a00+PM+%252b00%253a00+%252b00%253a00如何删除编码名称的天蓝色blob?

如果你仔细观察,%25编码时,一次和%2f成为:变得%。所以它看起来像Uri经历了双重编码。

当我试图获得这个blob,它不起作用。以下是代码片段:

BlobResultSegment resultSegment = await container.ListBlobsSegmentedAsync("myPrefix", true, BlobListingDetails.All, 10, null, null, null); 
var list = resultSegment.Results.Select(x => x.Uri.ToString().Split('/').Last()); 
var blob = container.GetBlockBlobReference(blobName); 
blob.FetchAttributes(); 
foreach (var element in list) 
     { 
      var blob = container.GetBlockBlobReference(element); 

      blob.FetchAttributes(); 
      var t = blob.Metadata; 
     } 

任何想法如何在尝试访问URL之前对URL进行编码?

注:我使用最新的Azure存储库

+0

这样的回答可以帮助:http://stackoverflow.com/questions/1405048/how-do-i-decode-a-url-parameter-using-c你可能只需要解码一次,但尝试两次,如果它不起作用。 (请参见http://msdn.microsoft.com/en-us/library/system.net.webutility.urlencode(v=vs.110).aspx for nonASP.net回答) – dodald 2014-11-06 20:15:17

+0

已尝试WebUtility.UrlDecode(WebUtility。 UrlDecode(blobName)),WebUtility.UrlDecode(blobName),HttpUtility.UrlDecode(blobName)等,他们都没有工作。不太确定内部是如何表示blob名称的。 – Amit 2014-11-06 20:36:47

回答

0

,而不是试图让一个blob参考,我们可以ListBlob结果只是转换为ICloudBlob,并调用删除就可以了。下面是代码:

var l= resultSegment.Results.Select(x => x as ICloudBlob); 
foreach (var cloudBlob in l) 
     { 
      cloudBlob.Delete(); 
     }