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

仅获取容器中Azure blob文件的所有名称?

易祯
2023-03-14

我希望Azure Blob文件中的所有名称都在一个容器中(用于特定目的)。我发现了一些类似的问题,甚至有一个是关于stackoverflow的。com(获取容器中Azure blob文件的名称列表?)。但所有这些答案都首先使用ListBlobs()方法。这就是我想要防止的,因为对于24000个文件,所有文件都存储在一个列表中并从每个文件中接收名称需要大约10分钟。我现在在C#中使用的方法:

            var container = GetOrCreateBlobContainer(containerName);
            var blobs = container.ListBlobs(useFlatBlobListing: true);
            var blobNames = blobs.OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
            return blobNames;

我想要什么:直接从存储中获取所有名称,而无需使用容器。ListBlobs() 首先。

这可能吗??

共有3个答案

毛淳
2023-03-14

正如Gaurav Mantri所说,你需要首先调用ListBlobs来获得一个容器中所有blobs的列表。

这里有一个解决方法,我建议您使用容器的元数据或上传一个txt文件来存储所有blob名称,然后您可以直接下载元数据或txt文件以获取所有blob的名称。

注意:元数据的最大大小是8kb,如果你有很多文件,我建议你可以使用txt来存储文件名。

储峻
2023-03-14

对于有同样问题的人,我想清除一些东西。这是需要10分钟的方法。这是因为我们正在循环所有24,000个文件以获取名称:

public IEnumerable<string> GetAllBlobNames(string containerName)
{
    try
    {
        var container = GetOrCreateBlobContainer(containerName);
        var blobs = container.ListBlobs(useFlatBlobListing: true);

        var blobNames = new List<string>();
        foreach (var item in blobs)
        {
            var blob = (CloudBlockBlob)item;
            blob.FetchAttributes();
            blobNames.Add(blob.Name);
        }
        return blobNames;
    }
    catch (Exception ex)
    {
        throw new DomainException("BlobStorageProvider_Retrieve_Fails", typeof(Properties.Resources), containerName, ex.ToStringExtended());
    }
}

经过一些研究,我们将代码更改为:

var container = GetOrCreateBlobContainer(containerName);
var blobs = container.ListBlobs(useFlatBlobListing: true);
var blobNames = blobs.OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
return blobNames;

第二种方式的持续时间为2秒。这比10分钟快得多。但我们仍然想知道我们是否必须使用容器。ListBlobs().

正如Gaurav Mantri所说,不首先使用container.ListBlobs()就不可能直接从存储中获取所有名称。希望这也能帮助其他人;)

刘和正
2023-03-14

我想要的是:直接从存储中获取所有名称,而不使用容器。首先是ListBlobs()。

这可能吗??

不,这是不可能的。需要调用 ListBlobs 才能获取容器中所有 Blob 的列表。

 类似资料:
  • 问题内容: 我需要使用文件夹中文件的所有名称创建一个列表。 例如,如果我有: 我想将它们存储为 with 作为值。 用Java做到最好的方法是什么? PS:我在Mac OS X上 问题答案: 你可以这样做: 你只想获取JPEG文件还是所有文件?

  • 问题内容: 出于某种原因,我使用以下代码将文件名始终保持为“ 1”: 当我在$ results_array中回显每个元素时,我得到了一堆‘1’,而不是文件名。如何获得文件名? 问题答案: 不要打扰open / readdir,而使用:

  • 本文向大家介绍Java获取文件夹下所有文件名称的方法示例,包括了Java获取文件夹下所有文件名称的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java获取文件夹下所有文件名称的方法。分享给大家供大家参考,具体如下: 更多关于java相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Jav

  • 问题内容: 我正在尝试使用Node.js获取目录中存在的所有文件的名称的列表。我想要的输出是一个文件名数组。我怎样才能做到这一点? 问题答案: 您可以使用或方法。 fs.readdir fs.readdirSync 两种方法的区别在于,第一种方法是异步的,因此您必须提供一个回调函数,该函数将在读取过程结束时执行。 第二个是同步的,它将返回文件名数组,但它将停止代码的任何进一步执行,直到读取过程结束

  • 这个命令给出了运行容器ID的列表: 是否有获取容器名称列表的命令?

  • 问题内容: 我只需要知道使用Java的Mac上文件的所有者名称,我该如何获取它?谢谢! 问题答案: 这个讨厌。有 没有 用于获取文件的所有者(至少直到并包括Java 6中,这是目前的生产版本的OSX)标准方法。现在,最简单的方法是使用a 来执行以文件名作为参数的对的调用,然后解析将在子进程的标准输出通道上返回的结果。解析结果时必须小心,因为OSX上的用户名可能包含空格。 或者,使用JNI。