74

如何在 azure 存储位置创建子容器?

4

5 回答 5

126

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")

请注意使用GetBlobDirectoryReferenceGetSubDirectory方法以及CloudBlobDirectory类型而不是CloudBlobContainer。这些提供了您可能正在寻找的遍历功能。

这应该可以帮助您入门。如果这不能回答您的问题,请告诉我:

[感谢尼尔麦肯齐的灵感]

于 2010-07-06T19:01:28.513 回答
14

你指的是blob存储吗?如果是这样,那么层次结构就是 StorageAccount/Container/BlobName。没有嵌套容器。

话虽如此,您可以在 blob 名称中使用斜杠来模拟 URI 中的嵌套容器。有关命名详细信息,请参阅MSDN 上的这篇文章。

于 2010-07-06T17:16:23.643 回答
6

我同意 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 字段。你可以编辑你想要的。我可能犯了拼写错误:/我很抱歉,但这只是我的建议。

于 2013-01-15T08:23:24.193 回答
4

如果您要从 Azure 门户上传文件:要在容器中创建子文件夹,上传文件时可以转到高级选项并选择上传到文件夹,这将在容器中创建一个新文件夹并将文件上传到那。

于 2019-09-05T05:07:40.013 回答
-1

示例代码

string myfolder = "<folderName>";
string myfilename = "<fileName>";
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename);
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
于 2017-08-08T07:02:47.100 回答