获取容器中的所有Azure blob文件名称?
我想要一个容器中的Azure Blob文件中的所有名称(出于某种目的)。我发现了一些类似的问题,即使在stackoverflow.com上有一个问题(getting list of names of Azure blob files in a container?)。但所有这些答案都首先使用ListBlobs()方法。这是我想要防止的,因为有24,000个文件,大约需要10分钟才能将所有文件存储在列表中,并且从每个文件接收名称。方法我在C#现在使用:获取容器中的所有Azure blob文件名称?
var container = GetOrCreateBlobContainer(containerName);
var blobs = container.ListBlobs(useFlatBlobListing: true);
var blobNames = blobs.OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
return blobNames;
我想要什么:直接从存储获取所有名称不使用()首先使用container.ListBlobs。
这可能吗?
我想要什么:直接从存储获取所有名称,而不使用 container.ListBlobs()。
这可能吗?
不,这是不可能的。您将需要致电ListBlobs
以获取容器中所有斑点的列表。
由于Gaurav Mantri说您需要先调用ListBlobs来获取容器中所有斑点的列表。
这是一种解决方法,我建议您使用容器的元数据或上传一个txt文件来存储所有blob名称,然后您可以直接下载元数据或txt文件来获取所有blob名称。
注意:元数据最大大小是8kb,如果你有很多文件,我建议你可以使用txt来存储文件名。
对于有同样问题的人,我想清除一些事情。这是需要10分钟的方法。这是因为我们通过所有24000个文件循环的事实得到名称:
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分钟快得多。但是我们仍然想知道我们是否必须使用container.ListBlobs()
。
正如Gaurav Mantri所说,如果不先使用container.ListBlobs()
,直接从存储器中获取所有名称是不可能的。希望这可以帮助其他人;)
感谢您的评论,但文件每天都在变化,所以保持txt文件是最新的将是不可能的。 –