我将WindowsAzure.Storage升级到4.0.3 我想在网页中输出一个文件夹中的blob列表,点击链接下载blob。由于blob位于安全容器中,因此每个URI都需要共享访问签名。
我曾经有过:
var dir = Container.GetDirectoryReference(folderName);
List<IListBlobItem> blobs = dir.ListBlobs().ToList();
var blobsInFolder = new List<Uri>();
foreach (IListBlobItem listBlobItem in blobs)
{
var blob = Container.GetBlockBlobReference(listBlobItem.Uri.ToString());
string sasBlobToken = blob.GetSharedAccessSignature(_sasConstraints);
blobsInFolder.Add(new Uri(blob.Uri + sasBlobToken));
}
return blobsInFolder;
这不再有效,因为GetBlockBlobReference不再接受URI而是接受文件名。 IListBlobItem不包含文件名。
我可以开始砍掉Uri来获取文件夹和文件名
var blob = Container.GetBlockBlobReference(folderName + "/" + Path.GetFileName(listBlobItem.Uri.AbsolutePath));
...但我觉得这样做是错误的(我不应该这样做?)。有人能以正确的方式指出我吗?
答案 0 :(得分:2)
尝试将IListBlobItem
投射到CloudBlockBlob
foreach (IListBlobItem listBlobItem in blobs)
{
var blob = (CloudBlockBlob) listBlobItem;
string sasBlobToken = blob.GetSharedAccessSignature(_sasConstraints);
blobsInFolder.Add(new Uri(blob.Uri + sasBlobToken));
}
return blobsInFolder;