我正在尝试从 Azure 存储资源管理器下载 block blob。我能够下载容器根目录中存在的所有 block blob。我无法下载嵌套在容器内子文件夹中的 blob。
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddHours(1);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
string sasBlobToken = blob.GetSharedAccessSignature(sasConstraints);
return blob.Uri.AbsoluteUri + sasBlobToken;
最佳答案
我无法使用 GetBlockBlobReference(fileName) 获取 blockBlob 的绝对路径。下面的代码解决了我的问题。我获得了列表,然后使用 LINQ 获取带有绝对路径详细信息的 blockBlob。 This post helped as well
do
{
var listingResult = await blobDirectory.ListBlobsSegmentedAsync(useFlatBlobListing, blobListingDetails, maxBlobsPerRequest, continuationToken, null, null);
//The below lined fetched the blockBlob with the correct directory details.
var blockBlob = listingResult.Results.Where(x => x.Uri.AbsolutePath.Contains(fileName)).Count()>0 ? (CloudBlockBlob)listingResult.Results.Where(x=>x.Uri.AbsolutePath.Contains(fileName)).FirstOrDefault():null;
if (blockBlob != null)
{
sasConstraints.SharedAccessExpiryTime = expiryTimeSAS;
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
string sasBlobToken = blockBlob.GetSharedAccessSignature(sasConstraints);
return blockBlob.Uri.AbsoluteUri + sasBlobToken;
}
continuationToken = listingResult.ContinuationToken;
} while (continuationToken != null);
如果有任何其他有效的方法可以从容器中的目录列表中提取 blob 信息,请纠正我。
关于azure - GetBlockBlobReference 未提供文件夹路径详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845896/