我的文件夹结构如下
(Container)->(1)School->(2)Staffs
->(2.a)OfficeStaffs
-> (2.a.i)Admin ->(Blobs)
-> (2.a.ii)Clerk->(Blobs)
->(2.b)Teachers
->(2.b.i)SeniorStudents ->(Year)->AttendanceReport.xlx
->ExamReport.xlx
->(2.b.ii)JuniorStudents ->(Year)->AttendanceReport.xlx
->ExamReport.xlx
学校是我的父文件夹,所有其他文件夹都是子文件夹。现在我需要使用文件夹名称查找blob。文件夹名称可能会保留在中间。例如,用户可以在UI中按员工类型或教师或学生类型或按年份搜索选项。没有按文件夹级别逐个搜索blob的强制选项。如果用户选择教师,我需要显示所有教师和学生文件夹中各自的blob。如果用户选择年份,我们需要得到属于特定年份文件夹的所有blob。在这种情况下,我们将从用户接收“年”值。2我们将不知道它的父文件夹。3我们只需要根据年份来检索。4如果用户选择“办公室职员”和“教师”,我们需要从两个文件夹中检索所有子文件夹和blob。
我试着用Blob前缀来获取中间文件夹,但没有运气。它总是期望初始文件夹路径和下一个文件夹的顺序基础。无法获取中间文件夹。
BlobContainerClient client = new BlobContainerClient(connectionString, containerName);
List<FileData> files = new List<FileData>();
await foreach (BlobItem file in client.GetBlobsAsync(prefix: "SeniorStudents"))
{
files.Add(new FileData
{
FileName = file.Name
}
}
这不是在SeniorStudents文件夹下获取blob。返回的是空的。请帮助我。谢谢。
2条答案
按热度按时间pu3pd22g1#
ecbunoof2#
我的文件夹结构如下
不需要。除非启用了分层命名空间,否则您看到的所有(子)文件夹都是虚拟的。这些文件夹由blob的名称定义。每个
/
在存储资源管理器中都将被视为虚拟文件夹。在您的示例中,容器中有多个blob:
1.学校/教职工/教师/学长/2022/考勤报表. xlx
1.学校/教职工/教师/高年级学生/2022/考试报告. xlx
1.学校/教职工/教师/大三学生/2022/考勤报表. xlx
1.学校/教职工/教师/大三学生/2022/考试报告. xlx
正如你所看到的,它是一个平面列表,当你试图根据前缀查找blob时,你需要记住它就像是用C#
string.StartsWith
方法匹配一个字符串。因此,使用前缀
School/Staffs/OfficeStaffs/Admin/
,您将找到blob 1,使用前缀School/Staffs/Teachers
,您将找到blob 3到6。前缀Staffs
不列出任何blob,因为没有名称开头带有文本 * staff * 的blob。在您的示例中,这意味着您必须获取 * all * blob,并使用string. split()拆分它们的名称。例如,下面的代码查找以某种方式位于名为
SeniorStudents
的文件夹中的所有blob,而不管该虚拟文件夹位于哪个级别:在上面的示例中,如果您想要所有教师的所有2022文件,可以执行以下操作:
备选
如果你有很多的blob,上面的方法将迫使你执行一个低效的查询来从2000个blob中得到5个结果,因为你需要在确定它们是否匹配标准之前得到所有的blob。
作为一种选择,你可以给你的blob添加tags,每个标签代表一个文件夹或类别,这样就很容易找到所有有特定标签的blob。注意限制,一个给定的blob上最多可以定义10个标签,请参阅文档。