如何在 azure 存储位置创建子容器?
5 回答
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 是针对您的“内容”容器的平面列表。也就是说,使用“/”作为常规分隔符,为您提供了以分层方式遍历这些的功能。
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。这些提供了您可能正在寻找的遍历功能。
这应该可以帮助您入门。如果这不能回答您的问题,请告诉我:
[感谢尼尔麦肯齐的灵感]
你指的是blob存储吗?如果是这样,那么层次结构就是 StorageAccount/Container/BlobName。没有嵌套容器。
话虽如此,您可以在 blob 名称中使用斜杠来模拟 URI 中的嵌套容器。有关命名详细信息,请参阅MSDN 上的这篇文章。
我同意 tobint 的回答,我想在这种情况下添加一些东西,因为我也需要以同样的方式将我的游戏 html 上传到 Azure 存储并创建这个目录:
- 游戏\美容店\index.html
- 游戏\美容店\资产\apple.png
- 游戏\美容店\资产\芳香.png
- 游戏\美容店\customfont.css
- 游戏\美容店\jquery.js
因此,根据您的建议,我尝试使用 Azure Storage Explorer 工具上传我的内容,您可以使用此 url 下载工具和源代码:Azure Storage Explorer
首先,我尝试通过工具上传,但它不允许分层目录上传,因为您不需要:如何在 blob 容器中创建子目录
最后,我调试了 Azure 存储资源管理器源代码,并在 StorageAccountViewModel.cs 文件中编辑了 Background_UploadBlobs 方法和 UploadFileList 字段。你可以编辑你想要的。我可能犯了拼写错误:/我很抱歉,但这只是我的建议。
如果您要从 Azure 门户上传文件:要在容器中创建子文件夹,上传文件时可以转到高级选项并选择上传到文件夹,这将在容器中创建一个新文件夹并将文件上传到那。
示例代码
string myfolder = "<folderName>";
string myfilename = "<fileName>";
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename);
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);