2010-07-06 14 views

Odpowiedz

93

Windows Azure nie dostarcza pojęcia kontenerów heirarchicznych, ale zapewnia mechanizm przechodzenia heirarchii przez konwencję i API. Wszystkie pojemniki są przechowywane na tym samym poziomie. Możesz uzyskać prostą funkcjonalność, używając konwencji nazewnictwa dla nazw swoich obiektów blob.

Na przykład, można utworzyć kontener o nazwie „zawartość” i tworzyć plamy z następującymi nazwami w tym pojemniku:

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 

Uwaga, że te plamy są płaskie lista przeciw „content” kontenerze . To powiedziawszy, użycie "/" jako tradycyjnego separatora zapewnia funkcjonalność do przechodzenia przez nie w sposób heirarchiczny.

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(); 
} 

Następnie można nazwać to w następujący sposób:

GetDirectoryList("content/blue", "images") 

Uwaga wykorzystanie GetBlobDirectoryReference i GetSubDirectory metod i typ CloudBlobDirectory zamiast CloudBlobContainer. Zapewniają one funkcjonalność przejścia, której prawdopodobnie szukasz.

To powinno pomóc w rozpoczęciu pracy. Daj mi znać, jeśli to nie jest odpowiedź na pytanie:

[Dzięki Neil Mackenzie inspiracji]

+14

Należy pamiętać, że od wersji 2.0 SDK 'GetBlobDirectoryReference' bit nie działa. Zamiast tego, możemy wykorzystać następujące: 'pojemnik CloudBlobContainer = cloudBlobClient.GetContainerReference (NazwaKatalogu)' 'CloudBlobDirectory podkatalogu = container.GetDirectoryReference (subDirectoryName);' etc ... – Knelis

+2

istnieje implementacja PHP tej koncepcji? –

+0

Czy ma to być 'cloudBlobClient' lub' client' w wywołaniach funkcji? – juunas

7

Czy odnosisz się do magazynu blob? Jeśli tak, hierarchia to po prostu StorageAccount/Container/BlobName. Nie ma zagnieżdżonych kontenerów.

Powiedziawszy to, możesz użyć ukośników w nazwie blobu do symulowania zagnieżdżonych kontenerów w identyfikatorze URI. Zobacz this article on MSDN, aby poznać szczegóły nazywania.

5

I aggree z tobint odpowiedź i chcę coś dodać tę sytuację, bo też muszę sam sposób przesyłania moje gry HTML na Azure Storage z tworzenia tych katalogów:

  • Games \ Salon piękności \ index.html
  • Games \ Salon piękności \ aktywa \ Apple.png
  • Games \ Salon piękności \ aktywa \ aro mas.png
  • Gry \ Automatyzacja \ customfont.css
  • Gry \ Sklep z kosmetykami \ jquery.js

Więc Po zaleca Próbowałem przesłać moje treści z narzędziem, które jest Azure Storage Explorer można pobrać narzędzie i kodu źródłowego z adresem URL: Azure Storage Explorer

Przede wszystkim starałem się przekazać za pośrednictwem narzędzia ale nie pozwala na hierarchiczne przesyłanie katalogów, ponieważ nie potrzebujesz: How to create sub directory in a blob container

Wreszcie, debuguję kod źródłowy Azure Storage Explorer i edytowałem metodę Background_UploadBlobs i UploadFileList w pliku StorageAccountViewModel.cs. Możesz edytować to, co chcesz. Może popełniłem błędy w pisowni:/Bardzo mi przykro, ale to tylko moja rekomendacja.

-1

Przykładowy kod

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