当前位置: 首页 > 知识库问答 >
问题:

按 CloudBlobDirectory 对象中的前缀列出 blob

孟杰
2023-03-14

我有一个azure容器,其中包含按日期命名的目录(例如20201203包含2020年12月23日创建的所有文件)。目录中的文件是这样命名的: {filename}{format}{extension} 对于目录20201203的例子,我有这3个文件:

    < li>file1_300_300.png < li>file1_150_150.png < li>file2_300_300.png

我想获得特定于一个文件名的所有blobs(因此所有文件都有不同的格式)。< code>CloudBlobContainer对象的方法< code>ListBlobs()可以采用过滤blobs的字符串参数。问题是在我的例子中,我有一个< code>CloudBlobDirectory对象,而不是< code>CloudBlobContainer。< code>CloudBlobDirectory对象的< code>ListBlobs()方法没有使用简单字符串参数作为前缀筛选器来获取特定blobs的重载。我当然可以用< code>var blobs = myAzureDirectory检索目录中的所有blob。ListBlobs(),然后检查每个blob的名称是否以我要查找的名称开头。但是这样做的性能会很差,因为我在每个目录中都有很多文件,并且有很多目录要处理。

有好的方法吗?谢谢

共有1个答案

益兴生
2023-03-14

众所周知,Azure存储SDK基本上基于Azure REST API,例如,list<code>ListBlobs()前缀参数在这里没有帮助。

您的方法性能不佳的原因是由于循环查询您的所有虚拟目录:一个循环意味着一个HTTP请求,正如您所说,您的容器中有许多目录,这导致了性能不佳。

实际上,你可以从你的容器中获取所有blob的列表,然后自己过滤blob,基本上,这里只有一个HTTP请求,本地过滤blob比API调用快得多。尝试下面的代码:

using Microsoft.WindowsAzure.Storage;
using System;

namespace sdkv11
{
    class Program
    {
        static void Main(string[] args)
        {
            var connstr = "<connection string >";
            var containerName = "<your container name>";
            var filePrefix = "<file prefix>";
            var storageAccount = CloudStorageAccount.Parse(connstr);
            var container = storageAccount.CreateCloudBlobClient().GetContainerReference(containerName);
            var blobs = container.ListBlobs(useFlatBlobListing: true);
            foreach (var blob in blobs) {

                var fileName = blob.Uri.LocalPath.Substring(blob.Uri.LocalPath.LastIndexOf("/") + 1);
                
                if (fileName.StartsWith(filePrefix)) {
                    Console.WriteLine(blob.Uri);
                }
                
            }
            Console.ReadKey();
            
        }
    }
}

结果:

 类似资料:
  • 正如标题所说,我有一个问题。我有两个数组。一个长度是五个。另一个长七个。 即使两个数组中的对象不同,如果数组中的所有对象具有相同的id,则将判断为具有相同的对象。 关于javascript有很多答案,但似乎关于java的答案并不多。任何遇到相同问题的人都可以分享解决方案。如果您对我的问题有任何类似的问题,请分享。非常感谢。 以下是我的尝试和样本数据。 列表的5个对象是这个。 如果manName不同

  • 我有一个大约英语单词及其初始频率的列表。我想写一个单词完成建议程序,它将返回一个最大单词列表,从给定前缀开始,按频率降序排序。数据结构还应该能够将一个单词的频率计数更新1(无论何时使用一个单词)。 例如,给定'engin'作为前缀,并且,它应该返回这样的列表-{17,“engine”}、{10,“engineer”}、{4,“engineering”} 的值应在[1,15]范围内。 如果按频率排序

  • 如何更改pandas数据框的列标签: 到

  • 我有JSON响应: 1个用户的POJO/DTO类: 和类的整个反应: 我可以在Map中检索值,然后在代码中手动解析/Map,就像Jackson JSON Map键一样,作为包含对象的属性 还有@JsonAlias用于多个命名变化,但它映射到一个对象。 是否有其他方法可以将提供的前缀的JSON值映射/分组到列表中?

  • 问题内容: 如何仅列出具有给定前缀()的数据库? 例: 输出: 预期产量: 奖金: 在我的情况下,可以在不定义new 的情况下创建数据库吗? 我的目标是仅在具有前缀的数据库上运行查询,所以可能存在比列出数据库更好的解决方案,然后在每个数据库上运行查询吗? 问题答案: 只需按表示数据库名称的属性进行过滤。要列出以给定前缀开头的数据库,可以使用regexp为: 其他过滤器选项在命令页面上列出: 您可以

  • 问题内容: 我正在寻找一种用于处理.dbo前缀的高性能默认策略。 我意识到dbo。前缀不仅是语法上的噪音,但是我在过去8年的基于MS的开发过程中都跳过了键入dbo的过程。前缀并忽略其功能。 除了存储的proc编译锁的性能问题之外,还有在SQL查询和存储过程中跳过键入“ .dbo”的缺点吗? 进一步的背景知识:我所有的开发都是基于Web中间层的,并具有基于中间层服务帐户的集成安全性。 问题答案: [