谁能告诉我,为什么我们不能在 azure storage 的容器中创建一个容器?以及任何处理方法,我们需要在天蓝色存储中创建目录层次结构?
问问题
1618 次
3 回答
14
您不能在容器中创建容器,因为 Windows Azure 根本不支持分层容器(您应该将容器视为像C:\磁盘一样的“磁盘驱动器”)。但是通过CloudBlobDirectory类支持使用目录。这是Neil 博客中的一个示例:
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;
}
}
于 2012-06-18T10:45:15.027 回答
1
下面是我的班级(用于管理 blob)在工作项目中的 azure 容器的工作代码。
请注意,您对容器中文件夹和容器中 blob 文件的命名应该是小写字母,否则您可能会遇到错误
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();
}
}
}
于 2015-04-30T20:28:51.517 回答
1
在另一个容器中为 Azure blob 存储创建容器的最简单方法是使用来自 Cerebrata 的名为 Azure Explorer 的免费 Azure 存储管理工具。
它允许您通过创建新文件夹来创建容器。
于 2015-05-04T01:18:13.683 回答