2010-07-06 74 views

回答

93

Windows Azure沒有提供容器的概念,但它確實提供了一種通過約定和API來遍歷層次結構的機制。所有容器都存儲在同一個級別。您可以通過爲您的blob名稱使用命名約定來獲得simliar功能。

例如,您可以創建一個名爲「內容」的容器中,並創建斑點,在該容器中的名稱如下:

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 

注意,這些斑點是對你的「內容」容器的平面列表。也就是說,使用「/」作爲常規分隔符,爲您提供了以分層方式遍歷它們的功能。

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。這些提供了您可能要查找的遍歷功能。

這應該有助於您開始使用。讓我知道這不回答你的問題:

[感謝Neil Mackenzie靈感]

+14

請注意,由於SDK 2.0版的'GetBlobDirectoryReference'位不起作用。我們可以使用下面的代碼: 'CloudBlobContainer container = cloudBlobClient.GetContainerReference(directoryName);' 'CloudBlobDirectory subDirectory = container.GetDirectoryReference(subDirectoryName);' etc ... – Knelis 2013-04-04 12:18:56

+2

這個概念有PHP實現嗎? – 2014-12-20 11:03:56

+0

在你的函數調用中它應該是'cloudBlobClient'還是'client'? – juunas 2016-10-24 13:42:09

7

您是指blob存儲?如果是這樣,層次結構就是StorageAccount/Container/BlobName。沒有嵌套的容器。儘管如此,您可以在blob名稱中使用斜槓來模擬URI中的嵌套容器。有關命名詳細信息,請參閱this article on MSDN

5

我aggree與tobint答案,我想是因爲我還 我需要同樣的方式上傳補充一下這個情況我的遊戲HTML到Azure存儲與創建此目錄:

  • 遊戲\ Beautyshop \ index.html在
  • 遊戲\ Beautyshop \資產\ apple.png
  • 遊戲\ Beautyshop \資產\ ARO mas.png
  • Games \ Beautyshop \ customfont.css
  • Games \ Beautyshop \ jquery。JS

所以,你的建議後,我想我的內容上傳用的工具,它是Azure存儲資源管理器,你可以下載工具和源代碼,這個網址:Azure Storage Explorer

首先,我試圖通過工具來上傳但它不允許分級目錄上傳,因爲您不需要:How to create sub directory in a blob container

最後,我調試Azure存儲資源管理器源代碼,並在StorageAccountViewModel.cs文件中編輯了Background_UploadBlobs方法和UploadFileList字段。你可以編輯它你想要的。我可能犯了拼寫錯誤:/我很抱歉,但這只是我的建議。

-1

示例代碼

string myfolder = "<folderName>"; 
string myfilename = "<fileName>"; 
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename); 
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);