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

4 人关注

我想从一个容器中获取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;

我想要什么?直接从存储器中获取所有的名字,而不先使用container.ListBlobs()。

这可能吗?

c#
.net
azure
blob
azure-blob-storage
E. Verdi
E. Verdi
发布于 2017-03-07
3 个回答
Gaurav Mantri
Gaurav Mantri
发布于 2017-03-08
已采纳
0 人赞同

我想要什么?直接从存储中获取所有的名字,而不使用 container.ListBlobs()。

这可能吗?

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

E. Verdi
E. Verdi
发布于 2017-03-08
0 人赞同

对于有同样问题的人,我想澄清一些事情。这是一个需要10分钟的方法。这是因为我们在所有24,000个文件中进行循环以获得名称。

public IEnumerable<string> GetAllBlobNames(string containerName)
        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分钟快多了。但是我们仍然在想,我们是否必须使用container.ListBlobs()

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

Brando Zhang
Brando Zhang
发布于 2017-03-08
0 人赞同