2010-07-06 9 views

Respuesta

93

Windows Azure no proporciona el concepto de contenedores jerárquicos, pero proporciona un mecanismo para atravesar la jerarquía por convención y API. Todos los contenedores se almacenan en el mismo nivel. Puede obtener una funcionalidad similar mediante el uso de convenciones de nomenclatura para sus nombres de blob.

Por ejemplo, puede crear un contenedor llamado "contenido" y crear burbujas con los siguientes nombres de ese contenedor:

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 que estas manchas son una lista plana contra su contenedor "contenido" . Dicho esto, usar el "/" como un delimitador convencional, le proporciona la funcionalidad para atravesar estos de forma jerárquica.

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

A continuación, puede llamar a esto de la siguiente manera:

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

Nota el uso de GetBlobDirectoryReference y GetSubDirectory métodos y el tipo CloudBlobDirectory en lugar de CloudBlobContainer. Estos proporcionan la funcionalidad transversal que probablemente esté buscando.

Esto debería ayudarlo a comenzar. Hágamelo saber si esto no responde a su pregunta:

[Gracias a Neil Mackenzie en busca de inspiración]

+14

Tenga en cuenta que a partir de la versión 2.0 del SDK del 'poco GetBlobDirectoryReference' no funciona. En su lugar, podemos usar lo siguiente: 'CloudBlobContainer container = cloudBlobClient.GetContainerReference (directoryName);' 'CloudBlobDirectory subDirectory = container.GetDirectoryReference (subDirectoryName);' etc ... – Knelis

+2

¿Existe una implementación PHP de este concepto? –

+0

¿Se supone que es 'cloudBlobClient' o' client' en tus llamadas a funciones? – juunas

7

¿Se refiere al almacenamiento de blob? Si es así, la jerarquía es simplemente StorageAccount/Container/BlobName. No hay contenedores anidados.

Dicho esto, puede usar barras en el nombre de su blob para simular contenedores anidados en el URI. Ver this article on MSDN para nombrar detalles.

5

I aggree con la respuesta tobint y quiero añadir algo a esta situación porque yo también necesito la misma forma de subida mis juegos html a Azure de almacenamiento con crear este directorios:

  • Games \ Beautyshop \ index.html
  • Games \ \ Beautyshop activos \ Apple.png
  • Games \ \ Beautyshop activos \ aro mas.png
  • Juegos \ Beautyshop \ customfont.css
  • Juegos \ Beautyshop \ jquery.js

Así Después de su recomienda Traté de subir mi contenido con la herramienta que es Azure Storage Explorer y se puede descargar la herramienta y el código fuente con esta url: Azure Storage Explorer

En primer lugar he intentado subir a través de la herramienta pero no permite la carga de directorios jerárquica porque no necesita: How to create sub directory in a blob container

Finalmente, depuro el código fuente de Azure Storage Explorer y edité el método Background_UploadBlobs y el campo UploadFileList en el archivo StorageAccountViewModel.cs. Puedes editarlo como quieras. Pude haber cometido errores ortográficos:/Lo siento mucho, pero eso es solo mi recomendación.

-1

Código de ejemplo

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