首页 > 解决方案 > 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;

标签: azureazure-storageazure-blob-storage

解决方案


我无法使用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 信息,请纠正我。


推荐阅读