¿Alguien puede decirme por qué no podemos crear un contenedor dentro de un contenedor en almacenamiento azul? Y cualquier método para manejar, ¿dónde tenemos que crear una jerarquía de directorios en almacenamiento azul?Azure Containers
Respuesta
No puede crear un contenedor en un contenedor porque Windows Azure simplemente no admite contenedores jerárquicos (debe ver un contenedor como una "unidad de disco" como usted C: \ disco). Pero trabajar con directorios es compatible con la clase CloudBlobDirectory. Este es un ejemplo de Neil's blog:
protected void GetDirectoryList(String topLevelDirectoryName, String subDirectoryName)
{
CloudStorageAccount cloudStorageAccount =
CloudStorageAccount.FromConfigurationSetting(“DataConnectionString”);
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobDirectory topLevelDirectory = cloudBlobClient.GetBlobDirectoryReferencetopLevelDirectoryName);
CloudBlobDirectory subDirectory = topLevelDirectory.GetSubdirectory(subDirectoryName);
IEnumerable<IListBlobItem> blobItems = subDirectory.ListBlobs();
foreach (IListBlobItem blobItem in blobItems)
{
Uri uri = blobItem.Uri;
}
}
A continuación se muestra un código de trabajo para el contenedor azul de mi clase (utilizado para la gestión de burbuja) en un proyecto de trabajo.
PLS y PLS en cuenta que sus nombres de las carpetas en el contenedor y los archivos blob en el contenedor debe estar en letra pequeña o podría tener un error
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
namespace XXXXXXXXXXX
{
public class Blob
{
private CloudBlobContainer Prerequisite(string userId)
{
var con = ConfigurationManager.AppSettings["StorageConnectionString"];
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
con);
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference(userId);
return container;
}
public void CreateUserContainerIfNotExisting(string userId)
{
CloudBlobContainer container = Prerequisite(userId);
// Create the container if it doesn't already exist.
container.CreateIfNotExists();
//Public access to all items in the container (meaning public can see it and download it but not modify and delete it)
container.SetPermissions(
new BlobContainerPermissions
{
PublicAccess =
BlobContainerPublicAccessType.Blob
});
}
public void ReadFileInBlob(string userId)
{
CloudBlobContainer container = Prerequisite(userId);
// Loop over items within the container and output the length and URI.
// foreach (IListBlobItem item in container.ListBlobs(null, false))
foreach (IListBlobItem item in container.ListBlobs(null, true))
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);
}
else if (item.GetType() == typeof(CloudPageBlob))
{
CloudPageBlob pageBlob = (CloudPageBlob)item;
Console.WriteLine("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri);
}
else if (item.GetType() == typeof(CloudBlobDirectory))
{
CloudBlobDirectory directory = (CloudBlobDirectory)item;
Console.WriteLine("Directory: {0}", directory.Uri);
}
}
}
public CloudBlockBlob AddOrModifyItemToBlob(string userId, string itemKey)
{
CloudBlobContainer container = Prerequisite(userId);
// Retrieve reference to a blob named "myblob".
CloudBlockBlob blockBlob = container.GetBlockBlobReference(itemKey);
return blockBlob;
}
public void DownloadToFolderLocation(string userId, string itemKey, string location)
{
CloudBlobContainer container = Prerequisite(userId);
// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = container.GetBlockBlobReference(itemKey);
// Save blob contents to a file.
using (var fileStream = System.IO.File.OpenWrite(location))
{
blockBlob.DownloadToStream(fileStream);
}
}
public string DownloadAsStream(string userId, string itemKey)
{
CloudBlobContainer container = Prerequisite(userId);
// Retrieve reference to a blob named "myblob.txt"
CloudBlockBlob blockBlob2 = container.GetBlockBlobReference(itemKey);
string text;
using (var memoryStream = new MemoryStream())
{
blockBlob2.DownloadToStream(memoryStream);
text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
return text;
}
public void DeleteBlobFile(string userId, string itemKey)
{
CloudBlobContainer container = Prerequisite(userId);
// Retrieve reference to a blob named "myblob.txt".
CloudBlockBlob blockBlob = container.GetBlockBlobReference(itemKey);
// Delete the blob.
blockBlob.Delete();
}
}
}
La forma más sencilla de crear un contenedor dentro de otro contenedor para Azure blob storage es usar una herramienta gratuita de administración de almacenamiento de Azure llamada Azure Explorer de Cerebrata.
Le permite crear un contenedor creando una nueva carpeta.
- 1. C# containers - vector ,. lista, cola, pila, etc.
- 2. boost :: formato e impresión personalizada a std containers
- 3. Microsoft Azure Storage vs. Azure SQL Database
- 4. Almacenamiento en Azure Blob vs Azure Drive
- 5. Azure Table Vs MongoDB en Azure
- 6. ¿Cómo se comparan SQL Azure y Azure Table Storage?
- 7. ¿Puede Azure ejecutar WPF?
- 8. Blobs seguras en Azure
- 9. SQL Azure Profiling
- 10. Windows Workflow en Azure
- 11. Azure Service Bus Escalabilidad
- 12. Sql Azure: ¿servidores separados?
- 13. Azure webrole nomenclatura
- 14. NHibernate en Azure?
- 15. Azure Storage Table Paging
- 16. Replicación SQL Azure
- 17. Cargando en Azure
- 18. SQL Azure Restablecer autoincrement
- 19. Ejecutando Solr en Azure
- 20. Azure web.config por entorno
- 21. ¿Se requieren puertos Azure?
- 22. Trace.WriteLine en ASP.NET Azure
- 23. Azure vs .NET Services
- 24. SQL Azure and Indexes
- 25. Sincronización entre roles Azure
- 26. Azure Service Bus velocidad
- 27. Rendimiento de Orchard en Azure
- 28. ¿Cumple SQL Azure PCI-DSS?
- 29. SQL Azure Federation en NHibernate
- 30. Windows Azure o RackSpace Cloud?
Vale la pena mencionar aquí que la estructura de carpetas como se logra mediante el uso de una barra inversa (\) en los nombres de Blob. Por lo tanto, podemos tener CloudBlobDirectories, que es solo una lista de blobs con el mismo prefijo (es decir, images \ someblob.jpg, images \ otherblob.jpg). Mientras que el nombre completo de una sola burbuja es "images \ someblob.jpg") – astaykov
Corrección al comentario de @ astaykov: se utilizan barras diagonales (/), y esto es solo el predeterminado. La API te permite especificar cualquier delimitador que desees. – smarx
Actualmente no hay función GetBlobDirectoryReference en CloudBlobClient. Para enumerar los contenidos de un directorio, puede usar esta respuesta http://stackoverflow.com/a/25312000/1519458 –