2014-05-06 8 views
15

Potrzebuję listy nazw plików Azure Blob. Obecnie mogę wyświetlić listę wszystkich plików z adresem URL, ale potrzebuję tylko listy nazw. Chcę uniknąć analizowania nazw. Można proszę zobaczyć mój poniższy kod i przewodnik:Uzyskiwanie listy nazw plików obiektów blob Azure w kontenerze?

CloudStorageAccount backupStorageAccount = CloudStorageAccount.Parse(blobConectionString); 

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

var list = backupContainer.ListBlobs(); 
+3

Czy twój pojemnik na blob zawiera tylko blokowe obiekty blokowe? Jeśli tak jest, to możesz po prostu zrobić coś takiego: 'List blobNames = list.Select (b => (b jako CloudBlockBlob) .Name);'. –

Odpowiedz

2

Możesz uzyskać dostęp do BlobProperties uzyskać nazwę:

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

dzięki. Czy można to zrobić w Lambda/Linq? Również samo myślenie w ten sposób wywoła funkcję GetBlobProperties dla każdego pliku blobowego, prawda? Twoja rada proszę. – Toubi

24

Jeśli używasz Windows Azure Storage 4.3.0, spróbuj tego kod.

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

Możemy uzyskać dodatkowe informacje, takie jak Rozmiar, Zmodyfikowana data i więcej. Skorzystaj z mojej odpowiedzi u dołu. –

11

Oto jeszcze jeden sposób, aby to zrobić:

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; 

Źródło: How to load list of Azure blob files recursively?

0

Pełna odpowiedź ze szczegółami.

 // 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

Możemy uzyskać dodatkowe informacje, takie jak rozmiaru, daty modyfikacji i Nazwa.

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

Ponadto można pobieranie konkretny plik wg nazwy.

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