我在azure存储上有一堆blob,其名称遵循以下模式:<someName>_DateTimeOffset.UtcNow
。当我使用container.ListBlobs()
获取blob时,blob Uri看起来像这样:<someName>__11%252f3%252f2014+10%253a00%253a00+PM+%252b00%253a00+%252b00%253a00
。
如果仔细观察,%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 :(得分:0)
我们可以将ListBlob结果转换为ICloudBlob
并在其上调用delete,而不是尝试获取blob引用。这是代码:
var l= resultSegment.Results.Select(x => x as ICloudBlob);
foreach (var cloudBlob in l)
{
cloudBlob.Delete();
}