2016-02-24 2 views
2

Je travaille sur le stockage de développement local Azure avec des conteneurs et des blobs. Je veux être en mesure d'afficher tous mes conteneurs et blobs dans une zone de liste comme une arborescence de mon stockage de développement local. Voici mon code:Liste tous les conteneurs et blobs

public List<string> ListContainer() 
    { 
     List<string> blobs = new List<string>(); 

     // Retrieve storage account from connection string. 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
      CloudConfigurationManager.GetSetting("AzureStorageConnectionString")); 

     // Create the blob client. 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

     //Get the list of the blob from the above container 

     IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers(); 

     foreach (CloudBlobContainer item in containers) 
     { 
      blobs.Add(string.Format("{0}", item.Uri.Segments[2])); 
     } 

     return blobs; 
    } 

Ici, j'affichons tous mes conteneurs. J'ai besoin d'afficher tous les blobs de chaque conteneur, ainsi que les sous-dossiers.

+0

J'ai posté une réponse [ici] (http://stackoverflow.com/a/35232885/272109) qui explique ce que vous devez faire pour énumérer les blobs dans un conteneur. Votre code n'énumère pas les blobs. –

Répondre

4

Vous itérez les conteneurs, pas les blobs dans les conteneurs. Sur chaque conteneur, vous devez appeler ListBlobs.

Votre code ressemblera:

foreach (CloudBlobContainer item in containers) 
    { 
     foreach (IListBlobItem blob in item.ListBlobs()){ 
      blobs.Add(string.Format("{0}", blob.Uri.Segments[2])); 
     } 
    } 
+0

Correct, assurez-vous que le conteneur a été créé. –

0

Je suis heureux de vous voir ici. Vous n'avez pas besoin de Listcontainer, vous devez créer un conteneur et un blob de liste. Tout d'abord, je vous ai déjà dit que vous devez créer un conteneur local pour votre stockage local, sinon, où pouvez-vous stocker ces fichiers? Vous pouvez utiliser container.createIfNotExists(); à un nouveau, et télécharger le fichier à son blob. Ou téléchargez azurestorageexplorer à partir de azurestorageexplorer.codeplex.com, créez un conteneur local au azurestorageexplorer.

Ceci est mon exemple simple:

public partial class _Default : Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
     ListBox1.DataSource =ListBlob("mycontainer"); 
     ListBox1.DataBind(); 

        } 
     public List<string> ListBlob(string folder) 
     { 
      List<string> blobs = new List<string>(); 

      // Retrieve storage account from connection string. 
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("StorageConnectionString")); 

      // Create the blob client. 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

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

      // Loop over items within the container and output the length and URI. 
      foreach (IListBlobItem item in container.ListBlobs(null, false)) 
      { 
       if (item.GetType() == typeof(CloudBlockBlob)) 
       { 
        CloudBlockBlob blob = (CloudBlockBlob)item; 

        blobs.Add(string.Format("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri)); 

       } 
       else if (item.GetType() == typeof(CloudPageBlob)) 
       { 
        CloudPageBlob pageBlob = (CloudPageBlob)item; 

        blobs.Add(string.Format("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri)); 

       } 
       else if (item.GetType() == typeof(CloudBlobDirectory)) 
       { 
        CloudBlobDirectory directory = (CloudBlobDirectory)item; 

        blobs.Add(string.Format("Directory: {0}", directory.Uri)); ; 
       } 
      } 
      return blobs; 
     } 

     protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      ListBox2.DataSource = ListBlob("mycontainer01"); 
      ListBox2.DataBind(); 
     } 
    } 

Assurez-vous ensemble AutoPostBack = "true" sur ListBox1, s'il vous plaît voir plus formulaire ici: https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/. Gardez le contact si vous avez des questions.