我该如何在Azure存储位置中创建子容器?
Windows Azure没有提供分层容器的概念,但是它确实通过惯例和API提供了遍历层级的机制。所有容器都存储在同一级别上。您可以通过为Blob名称使用命名约定来获得类似的功能。
例如,您可以创建一个名为“content”的容器,并在该容器中创建具有以下名称的Blob:
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
注意,这些Blob是针对您的 "content" 容器的一个平坦列表。话虽如此,使用“/”作为惯例分隔符,可以使您以分层的方式遍历它们。
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();
}
你可以按以下方式调用:
GetDirectoryList("content/blue", "images")
注意使用GetBlobDirectoryReference和GetSubDirectory方法以及CloudBlobDirectory类型,而不是使用CloudBlobContainer。这些提供了您可能正在寻找的遍历功能。
这应该能帮助您入门。如果这不能回答您的问题,请告诉我:
[ 感谢Neil Mackenzie提供的灵感 ]
您是在谈论Blob存储吗?如果是这样,在层次结构中仅有StorageAccount/Container/BlobName,没有嵌套容器。
话虽如此,您可以在Blob名称中使用斜杠来模拟URI中的嵌套容器。请参阅MSDN上的这篇文章以获取命名详情。
示例代码
string myfolder = "<folderName>";
string myfilename = "<fileName>";
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename);
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
CloudBlobContainer container = cloudBlobClient.GetContainerReference(directoryName);
CloudBlobDirectory subDirectory = container.GetDirectoryReference(subDirectoryName);
等等... - KneliscloudBlobClient
还是client
? - juunas