azure - GetBlockBlobReference 未提供文件夹路径详细信息
问题描述
我正在尝试从 Azure 存储资源管理器下载块 Blob。我能够下载容器根目录中存在的所有块 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。 这篇文章也有帮助
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 信息,请纠正我。
推荐阅读
- flutter - Flutter/Dart:将图像文件保存到“/storage/emulated/0/Picture/AppFolder/”
- java - Spring 5 授权未按预期工作
- reactjs - react-query with graphql-request:错误边界未运行
- snowflake-cloud-data-platform - Snowflake 是否会向我收取 WAREHOUSE_SIZE=NULL 的查询费用?
- python - 如何从压缩文件中读取 json 到 pandas 数据帧?
- android - Glide 不会从缓存位置加载图像
- sql - 如何使用基于分隔符的sql中的列数据进行拆分并在行中输出相同
- swift - 如何通过协议继承使具有关联类型的通用协议不是通用的?
- angular - Ngx Infinite scroll in angular si 在我的项目中抛出错误
- java - 如何使用 Java、SpringBoot 循环嵌套 JSON 并获取价值