2010-07-06 29 views

Trả lời

93

Windows Azure không cung cấp khái niệm về các thùng chứa heirarchical, nhưng nó cung cấp một cơ chế để vượt qua chế độ thừa kế theo quy ước và API. Tất cả các thùng chứa đều được lưu trữ cùng cấp. Bạn có thể đạt được chức năng simliar bằng cách sử dụng quy ước đặt tên cho tên blob của bạn.

Ví dụ, bạn có thể tạo một container đặt tên là "nội dung" và tạo các đốm màu với những cái tên sau đây trong container:

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 

Note rằng những đốm màu là một danh sách phẳng chống lại "nội dung" container của bạn . Điều đó nói rằng, bằng cách sử dụng "/" như là một dấu phân cách thông thường, cung cấp cho bạn các chức năng để đi qua chúng trong một thời trang heirarchical.

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

Sau đó bạn có thể gọi này như sau:

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

Note việc sử dụng GetBlobDirectoryReferenceGetSubDirectory phương pháp và các loại CloudBlobDirectory thay vì CloudBlobContainer. Chúng cung cấp chức năng traversal mà bạn có thể đang tìm kiếm.

Điều này sẽ giúp bạn bắt đầu. Hãy cho tôi biết nếu điều này không trả lời câu hỏi của bạn:

[Nhờ Neil Mackenzie cho cảm hứng]

+14

Xin lưu ý rằng tính SDK phiên bản 2.0 'cái GetBlobDirectoryReference' chút không hoạt động. Thay vào đó, chúng ta có thể sử dụng như sau: 'CloudBlobContainer container = cloudBlobClient.GetContainerReference (directoryName);' 'CloudBlobDirectory subDirectory = container.GetDirectoryReference (subDirectoryName);' etc ... – Knelis

+2

Có triển khai PHP của khái niệm này không? –

+0

Có phải đó là 'cloudBlobClient' hoặc' client' trong các cuộc gọi hàm của bạn không? – juunas

7

Bạn có đang đề cập đến bộ nhớ blob không? Nếu vậy, cấu trúc phân cấp chỉ đơn giản là StorageAccount/Container/BlobName. Không có vùng chứa lồng nhau.

Có nói rằng, bạn có thể sử dụng dấu gạch ngang trong tên blob của bạn để mô phỏng các vùng chứa lồng nhau trong URI. Xem this article on MSDN để biết chi tiết đặt tên.

5

Tôi aggree với câu trả lời tobint và tôi muốn thêm một cái gì đó tình huống này vì tôi cũng Tôi cần tải lên theo cùng một cách trò chơi của tôi html để Azure lưu trữ với tạo thư mục này:

  • Games \ Beautyshop \ index.html
  • Games \ Beautyshop \ tài sản \ apple.png
  • Games \ Beautyshop \ tài sản \ Aro mas.png
  • Games \ Beautyshop \ customfont.css
  • Games \ Beautyshop \ jquery.js

Vì vậy, Sau khi bạn đề nghị tôi đã cố gắng để tải lên nội dung của tôi với công cụ đó là Azure lưu trữ Explorer và bạn có thể tải về công cụ và mã nguồn với url này: Azure Storage Explorer

Trước hết tôi đã cố gắng để tải lên thông qua công cụ nhưng nó không cho phép tải lên thư mục phân cấp bởi vì bạn không cần: How to create sub directory in a blob container

Cuối cùng, tôi gỡ lỗi mã nguồn Azure Storage Explorer và tôi đã chỉnh sửa trường Background_UploadBlobs và trường UploadFileList trong tệp StorageAccountViewModel.cs. Bạn có thể chỉnh sửa nó những gì bạn muốn. Tôi có thể đã thực hiện lỗi chính tả:/Tôi rất xin lỗi nhưng Đó chỉ là đề nghị của tôi.

-1

Mẫu mã

string myfolder = "<folderName>"; 
string myfilename = "<fileName>"; 
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename); 
CloudBlockBlob blob = container.GetBlockBlobReference(fileName); 
Các vấn đề liên quan