获取容器中Azure blob文件的名称列表?

Tou*_*ubi 33 .net c# azure azure-storage-blobs

我需要列出Azure Blob文件名的名称.目前我能够列出所有带URL的文件,但我只需要列出名称.我想避免解析名称.能否请您查看我的以下代码和指南:

CloudStorageAccount backupStorageAccount = CloudStorageAccount.Parse(blobConectionString);

var backupBlobClient = backupStorageAccount.CreateCloudBlobClient();
var backupContainer = backupBlobClient.GetContainerReference(container);

var list = backupContainer.ListBlobs();
Run Code Online (Sandbox Code Playgroud)

小智 32

如果您使用的是Windows Azure Storage 4.3.0,请尝试使用此代码.

List<string> blobNames = list.OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
Run Code Online (Sandbox Code Playgroud)


mik*_*k-t 15

以下是完成此操作的另一种方法:

CloudStorageAccount backupStorageAccount = CloudStorageAccount.Parse(blobConectionString);

var backupBlobClient = backupStorageAccount.CreateCloudBlobClient();
var backupContainer = backupBlobClient.GetContainerReference(container);

// useFlatBlobListing is true to ensure loading all files in
// virtual blob sub-folders as a plain list
var list = backupContainer.ListBlobs(useFlatBlobListing: true);
var listOfFileNames = new List<string>();

foreach (var blob in blobs) {
  var blobFileName = blob.Uri.Segments.Last();
  listOfFileNames.Add(blobFileName); 
}

return listOfFileNames;
Run Code Online (Sandbox Code Playgroud)

来源:如何递归加载Azure blob文件列表?

  • 我认为“list”应该更新为“blob”。即 `var blobs = backupContainer.ListBlobs(useFlatBlobListing: true);` (2认同)

Vig*_*aja 13

我们可以获得一些额外的信息,如大小,修改日期名称.

CloudStorageAccount backupStorageAccount = CloudStorageAccount.Parse(YOUR_CON_STRING);

var backupBlobClient = backupStorageAccount.CreateCloudBlobClient();
var backupContainer = backupBlobClient.GetContainerReference("CONTAINER");


var blobs = backupContainer.ListBlobs().OfType<CloudBlockBlob>().ToList();

foreach (var blob in blobs)
{
    string bName = blob.Name;
    long bSize = blob.Properties.Length;
    string bModifiedOn = blob.Properties.LastModified.ToString();        
}
Run Code Online (Sandbox Code Playgroud)

您也可以按名称下载特定文件.

 // Download file by Name
 string fileName = "Your_file_name";
 CloudBlockBlob blobFile = backupContainer.GetBlockBlobReference(fileName);
 blobFile.DownloadToFile(@"d:\"+ fileName, System.IO.FileMode.Create);
Run Code Online (Sandbox Code Playgroud)


Apo*_*llo 9

完整的答案与细节.

        // Parse the connection string and return a reference to the storage account.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("AzureBlobConnectionString"));

        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference("container_name");

        // Retrieve reference to a blob named "test.csv"
        CloudBlockBlob blockBlob = container.GetBlockBlobReference("BlobName.tex");

        //Gets List of Blobs
        var list = container.ListBlobs();
        List<string> blobNames = list.OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
Run Code Online (Sandbox Code Playgroud)


Pet*_*čić 9

这适用于WindowsAzure.Storage 9.3.3

CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName);

var blobResultSegment = await cloudBlobContainer.ListBlobsSegmentedAsync(continuationToken);
var blobs = blobResultSegment.Results.Select(i => i.Uri.Segments.Last()).ToList();
Run Code Online (Sandbox Code Playgroud)

  • `BlobContinuationToken continuationToken = null;` (3认同)
  • @PetraStručić 请提供一些信息,您的评论没有帮助! (2认同)

小智 8

更新:

使用Azure.Storage.Blobs v12 - 包获取 Azure blob 文件的名称列表

var storageConnectionString = "DefaultEndpointsProtocol=...........=core.windows.net";
var blobServiceClient = new BlobServiceClient(storageConnectionString);

//get container
var container = blobServiceClient.GetBlobContainerClient("container_name");

List<string> blobNames = new List<string>();

//Enumerating the blobs may make multiple requests to the service while fetching all the values
//Blobs are ordered lexicographically by name
//if you want metadata set BlobTraits - BlobTraits.Metadata
var blobs = container.GetBlobsAsync(BlobTraits.None, BlobStates.None);
await foreach (var blob in blobs)
{
    blobNames.Add(blob.Name);
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多选项和示例。

这是nuget 包的链接。


Jon*_*len 6

ListBlobs方法似乎不再存在。这是一个异步版本。

    public static async Task<List<string>> ListBlobNamesAsync(CloudBlobContainer container)
    {
        var blobs = await ListBlobsAsync(container);
        return blobs.Cast<CloudBlockBlob>().Select(b => b.Name).ToList();

        //Alternate version
        //return blobs.Select(b => b.Uri.ToString()).Select(s => s.Substring(s.LastIndexOf('/') + 1)).ToList();
    }

    public static async Task<List<IListBlobItem>> ListBlobsAsync(CloudBlobContainer container)
    {
        BlobContinuationToken continuationToken = null; //start at the beginning
        var results = new List<IListBlobItem>();
        do
        {
            var response = await container.ListBlobsSegmentedAsync(continuationToken);
            continuationToken = response.ContinuationToken;
            results.AddRange(response.Results);
        }

        while (continuationToken != null); //when this is null again, we've reached the end
        return results;
    }
Run Code Online (Sandbox Code Playgroud)


Bre*_*een 2

您可以访问BlobProperties以获取名称:

foreach (object o in list)
{
    BlobProperties bp = o as BlobProperties;
    if (bp != null)
    {
        BlobProperties p = _Container.GetBlobProperties(bp.Name);
        var name = p.Name; // get the name
    }
}
Run Code Online (Sandbox Code Playgroud)