2010-07-06 8 views

risposta

93

Windows Azure non fornisce il concetto di contenitori gerarchici, ma fornisce un meccanismo per l'attraversamento dell'erarchia per convenzione e API. Tutti i contenitori sono memorizzati allo stesso livello. È possibile ottenere la funzionalità simliar utilizzando le convenzioni di denominazione per i nomi blob.

Ad esempio, è possibile creare un contenitore denominato "contenuto" e creare blob con i seguenti nomi in quel contenitore:

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 

Nota che queste macchie sono una lista piatta contro il vostro contenitore "contenuti" . Detto questo, usando "/" come delimitatore convenzionale, ti fornisce la funzionalità per attraversarli in modo gerarchico.

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

È quindi possibile chiamare questo come segue:

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

Nota l'uso di GetBlobDirectoryReference e GetSubDirectory metodi e il tipo CloudBlobDirectory invece di CloudBlobContainer. Questi forniscono la funzionalità trasversale che probabilmente stai cercando.

Questo dovrebbe aiutarti a iniziare. Fammi sapere se questo non risponde alla tua domanda:

[Grazie a Neil Mackenzie di ispirazione]

+14

Si prega di essere consapevoli del fatto che a partire dal SDK versione 2.0 il bit 'GetBlobDirectoryReference' non funziona. Invece, siamo in grado di utilizzare il seguente: 'contenitore CloudBlobContainer = cloudBlobClient.GetContainerReference (directoryName);' ' CloudBlobDirectory sottodirectory = container.GetDirectoryReference (subDirectoryName);' ecc ... – Knelis

+2

C'è un'implementazione PHP di questo concetto? –

+0

Si suppone che sia 'cloudBlobClient' o' client' nelle chiamate di funzione? – juunas

7

Si riferisce allo stoccaggio blob? In tal caso, la gerarchia è semplicemente StorageAccount/Container/BlobName. Non ci sono contenitori nidificati.

Detto questo, è possibile utilizzare le barre nel nome blob per simulare i contenitori annidati nell'URI. Vedi this article on MSDN per i dettagli sui nomi.

5

ho aggree con risposta tobint e voglio aggiungere qualcosa a questa situazione perché anche io ho bisogno allo stesso modo di upload i miei giochi html per Azure creano con questo directory:

  • Games \ Beautyshop \ index.html
  • Games \ Beautyshop \ beni \ Apple.png
  • Games \ Beautyshop \ beni \ aro mas.png
  • Giochi \ Beautyshop \ customfont.css
  • Giochi \ Beautyshop \ jquery.js

Quindi Dopo la vostra raccomanda ho cercato di caricare i miei contenuti con lo strumento che è Azure Explorer e si può scaricare strumento e codice sorgente con questo URL: Azure Storage Explorer

Prima di tutto ho cercato di caricare tramite strumento ma non consente il caricamento di directory gerarchiche perché non è necessario: How to create sub directory in a blob container

Infine, eseguo il debug del codice sorgente di Azure Storage Explorer e ho modificato il metodo Background_UploadBlobs e il campo UploadFileList nel file StorageAccountViewModel.cs. Puoi modificarlo come desideri. Potrei aver commesso errori di ortografia:/Mi dispiace, ma questo è solo il mio consiglio.

-1

codice di esempio

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