2010-07-06 7 views

Répondre

93

Windows Azure ne fournit pas le concept des conteneurs hiérarchiques, mais il fournit un mécanisme permettant de parcourir la hiérarchie par convention et API. Tous les conteneurs sont stockés au même niveau. Vous pouvez obtenir une fonctionnalité similaire en utilisant des conventions de dénomination pour vos noms de blob.

Par exemple, vous pouvez créer un conteneur nommé « contenu » et créer des blobs avec les noms suivants dans ce conteneur:

content/blue/images/logo.jpg 
content/blue/images/icon-start.jpg 
content/blue/images/icon-stop.jpg 

content/red/images/logo.jpg 
content/red/images/icon-start.jpg 
content/red/images/icon-stop.jpg 

Notez que ces blobs sont une liste à plat contre votre conteneur « contenu » . Cela dit, en utilisant le "/" comme un délimiteur conventionnel, vous offre la fonctionnalité de les traverser de manière hiérarchique.

protected IEnumerable<IListBlobItem> 
      GetDirectoryList(string directoryName, string subDirectoryName) 
{ 
    CloudStorageAccount account = 
     CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); 
    CloudBlobClient client = 
     account.CreateCloudBlobClient(); 
    CloudBlobDirectory directory = 
     client.GetBlobDirectoryReference(directoryName); 
    CloudBlobDirectory subDirectory = 
     directory.GetSubdirectory(subDirectoryName); 

    return subDirectory.ListBlobs(); 
} 

Vous pouvez ensuite appeler cela comme suit:

GetDirectoryList("content/blue", "images") 

Remarque l'utilisation de GetBlobDirectoryReference et GetSubDirectory méthodes et la CloudBlobDirectory de type au lieu de CloudBlobContainer. Ceux-ci fournissent la fonctionnalité de traversée que vous recherchez probablement.

Cela devrait vous aider à démarrer. Permettez-moi de savoir si cela ne répond pas à votre question:

[Merci à Neil Mackenzie inspiration]

+14

S'il vous plaît être conscient que la version SDK 2.0 le bit 'GetBlobDirectoryReference' ne fonctionne pas. Au lieu de cela, nous pouvons utiliser les éléments suivants: 'conteneur CloudBlobContainer = cloudBlobClient.GetContainerReference (directoryName)' ' CloudBlobDirectory = Sous-répertoire container.GetDirectoryReference (subDirectoryName);' etc ... – Knelis

+2

Y at-il une implémentation PHP de ce concept? –

+0

Est-il supposé être 'cloudBlobClient' ou' client' dans vos appels de fonction? – juunas

7

Faites-vous référence au stockage BLOB? Si c'est le cas, la hiérarchie est simplement StorageAccount/Container/BlobName. Il n'y a pas de conteneurs imbriqués. Cela dit, vous pouvez utiliser des barres obliques dans votre nom de blob pour simuler des conteneurs imbriqués dans l'URI. Voir this article on MSDN pour les détails de dénomination.

5

J'aggree avec réponse tobint et je veux ajouter quelque chose à cette situation parce que je aussi j'ai besoin de la même façon le téléchargement mes jeux html à Azure Storage avec créer ce répertoire:

  • Jeux \ Beautyshop \ index.html
  • Games \ Beautyshop \ actifs \ apple.png
  • Games \ Beautyshop \ actifs \ aro mas.png
  • Jeux \ Beautyshop \ customfont.css
  • Jeux \ Beautyshop \ jquery.js

donc après votre recommande j'ai essayé de télécharger mon contenu avec l'outil qui est Azure Storage Explorer et que vous pouvez télécharger l'outil et le code source avec cette url: Azure Storage Explorer

d'abord tout ce que j'ai essayé de télécharger via l'outil Mais il ne permet pas le téléchargement de répertoire hiérarchique parce que vous n'avez pas besoin: How to create sub directory in a blob container

Enfin, je débogue le code source Azure Storage Explorer et j'ai modifié la méthode Background_UploadBlobs et le champ UploadFileList dans le fichier StorageAccountViewModel.cs. Vous pouvez éditer ce que vous voulez. J'ai peut-être fait des fautes d'orthographe:/Je suis vraiment désolé mais c'est seulement mon conseil.

-1

Exemple de code

string myfolder = "<folderName>"; 
string myfilename = "<fileName>"; 
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename); 
CloudBlockBlob blob = container.GetBlockBlobReference(fileName); 
Questions connexes