为啥 Azure API 不列出名为 /folder/folder/file 的 blob?
Posted
技术标签:
【中文标题】为啥 Azure API 不列出名为 /folder/folder/file 的 blob?【英文标题】:Why doesn't Azure API list the blobs that is named /folder/folder/file?为什么 Azure API 不列出名为 /folder/folder/file 的 blob? 【发布时间】:2017-07-12 04:42:33 【问题描述】:我想创建文件夹和子文件夹,我找到了this workaround: 但是当我列出它们时:使用此代码(source):
foreach (IListBlobItem item in Container.ListBlobs(null, false))
if (item.GetType() == typeof(CloudBlockBlob))
CloudBlockBlob blob = (CloudBlockBlob)item;
Console.WriteLine("Block blob of length 0: 1", blob.Properties.Length, blob.Uri);
else if (item.GetType() == typeof(CloudPageBlob))
CloudPageBlob pageBlob = (CloudPageBlob)item;
Console.WriteLine("Page blob of length 0: 1", pageBlob.Properties.Length, pageBlob.Uri);
else if (item.GetType() == typeof(CloudBlobDirectory))
CloudBlobDirectory directory = (CloudBlobDirectory)item;
Console.WriteLine("Directory: 0", directory.Uri);
它只显示根容器中的父文件夹和 blob。 我期待将它们全部作为 blob 获取,因为这是虚拟目录而不是真实的, 例如我有这个文件
https://account.blob.core.windows.net/container/Accounts/Images/1/acc.jpg
但它不显示,它只是显示:
https://account.blob.core.windows.net/container/Accounts
和
https://account.blob.core.windows.net/container/anyfile
我是否必须请求父文件夹中的子文件夹才能访问该文件?
【问题讨论】:
【参考方案1】:请尝试在ListBlobs
方法中将第二个参数指定为true
。此参数指示您是需要平面 blob 列表 (true) 还是分层 blob 列表 (false)。
来自文档链接:
使用FlatBlobListing
类型:System.Boolean
一个布尔值,指定是否在平面中列出 blob 按虚拟列出,或者是否按层次列出 Blob 目录。
【讨论】:
【参考方案2】:如果有人正在使用最新的 Azure.Storage.Blobs SDK 寻找此类平面文件列表,您可以这样做:
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
BlobContainerClient blobContainerClient = blobServiceClient.GetBlobContainerClient(resource.Name);
var blobItemList = blobContainerClient.GetBlobs(); // This will get blobs without any hierarchy
【讨论】:
以上是关于为啥 Azure API 不列出名为 /folder/folder/file 的 blob?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure 管理 API 列出容器组失败并出现 System.Net.Sockets.SocketException
为啥会创建一个名为 Azure Blob 存储容器内文件夹名称的空文件?
Azure Data Lake Storage Gen2 REST API - 列出文件系统 - “代码”:“AuthorizationPermissionMismatch