2014-05-06 1 views
15

Devo elencare i nomi dei nomi di file BLOB di Azure. Attualmente sono in grado di elencare tutti i file con URL ma ho solo bisogno di un elenco di nomi. Voglio evitare di analizzare i nomi. Riesci a vedere il mio codice e guida sotto:Come ottenere l'elenco dei nomi dei file BLOB di Azure in un contenitore?

CloudStorageAccount backupStorageAccount = CloudStorageAccount.Parse(blobConectionString); 

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

var list = backupContainer.ListBlobs(); 
+3

Il contenitore del blob contiene solo blocchi BLOB? Se questo è il caso, allora potresti semplicemente fare qualcosa del tipo: 'Lista blobNames = list.Select (b => (b come CloudBlockBlob) .Name);'. –

risposta

2

È possibile accedere al BlobProperties per ottenere il nome:

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 
    } 
} 
+0

grazie. Si può fare in Lambda/Linq per favore? Inoltre, solo pensando in questo modo chiamerà la funzione GetBlobProperties per ogni file blob giusto? Il tuo consiglio per favore. – Toubi

24

Se stai usando archiviazione Windows Azure 4.3.0, provate questo codice.

List<string> blobNames = list.OfType<CloudBlockBlob>().Select(b => b.Name).ToList(); 
+0

Possiamo ottenere alcune informazioni aggiuntive come Dimensione, Data modificata e altro. Riferisci la mia risposta in fondo. –

11

Ecco un altro modo per ottenere questo fatto:

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; 

Fonte: How to load list of Azure blob files recursively?

0

risposta completa con i dettagli.

 // 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(); 
0

possiamo ottenere alcune informazioni aggiuntive, uguali Dimensione, Data modifica e Nome.

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();   
} 

Inoltre è possibile scaricare un file specifico per nome.

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