不确定使用SharedAccess令牌列出blob的正确方法

时间:2015-07-09 14:34:43

标签: azure azure-storage azure-storage-blobs

我将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));

...但我觉得这样做是错误的(我不应该这样做?)。有人能以正确的方式指出我吗?

1 个答案:

答案 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;