5

Azure ストレージのコンテナー内にコンテナーを作成できないのはなぜですか? Azureストレージにディレクトリ階層を作成する必要がある場合、処理する方法はありますか?

4

3 に答える 3

14

Windows Azure は単に階層型コンテナーをサポートしていないため、コンテナー内にコンテナーを作成することはできません (コンテナーは、C:\ディスクのように「ディスク ドライブ」として表示されます)。ただし、ディレクトリの操作は、CloudBlobDirectoryクラスを通じてサポートされています。Neil のブログの例を次に示します。

protected void GetDirectoryList(String topLevelDirectoryName, String subDirectoryName)
{
    CloudStorageAccount cloudStorageAccount =
       CloudStorageAccount.FromConfigurationSetting(“DataConnectionString”);
    CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

    CloudBlobDirectory topLevelDirectory = cloudBlobClient.GetBlobDirectoryReferencetopLevelDirectoryName);

    CloudBlobDirectory subDirectory = topLevelDirectory.GetSubdirectory(subDirectoryName);

    IEnumerable<IListBlobItem> blobItems = subDirectory.ListBlobs();
    foreach (IListBlobItem blobItem in blobItems)
    {
        Uri uri = blobItem.Uri;
    }
}
于 2012-06-18T10:45:15.027 に答える
1

以下は、作業中のプロジェクトでの私のクラス (blob の管理に使用) の azure コンテナーの作業コードです。
コンテナー内のフォルダーとコンテナー内の BLOB ファイルの名前は小文字にする必要があることに注意してください。そうしないと、エラーが発生する可能性があります。

 using System;
 using System.Collections.Generic;
 using System.Configuration;
 using System.IO;
 using System.Linq;
 using System.Web;
 using Microsoft.WindowsAzure;
 using Microsoft.WindowsAzure.Storage;
 using Microsoft.WindowsAzure.Storage.Auth;
 using Microsoft.WindowsAzure.Storage.Blob;

  namespace XXXXXXXXXXX
{

public class Blob
{

    private CloudBlobContainer Prerequisite(string userId)
    {
        var con =   ConfigurationManager.AppSettings["StorageConnectionString"];
        // Retrieve storage account from connection string.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
            con);

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference(userId);

        return container;
    }


    public void CreateUserContainerIfNotExisting(string userId)
    {
        CloudBlobContainer container = Prerequisite(userId);

        // Create the container if it doesn't already exist.
        container.CreateIfNotExists();

        //Public access to all items in the container (meaning public can see it and download it but not modify and delete it)
        container.SetPermissions(
          new BlobContainerPermissions
          {
              PublicAccess =
                  BlobContainerPublicAccessType.Blob
          }); 
    }

    public void ReadFileInBlob(string userId)
    {
        CloudBlobContainer container = Prerequisite(userId);

        // Loop over items within the container and output the length and URI.
       // foreach (IListBlobItem item in container.ListBlobs(null, false))
        foreach (IListBlobItem item in container.ListBlobs(null, true))
        {
            if (item.GetType() == typeof(CloudBlockBlob))
            {
                CloudBlockBlob blob = (CloudBlockBlob)item;

                Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);

            }
            else if (item.GetType() == typeof(CloudPageBlob))
            {
                CloudPageBlob pageBlob = (CloudPageBlob)item;

                Console.WriteLine("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri);

            }
            else if (item.GetType() == typeof(CloudBlobDirectory))
            {
                CloudBlobDirectory directory = (CloudBlobDirectory)item;

                Console.WriteLine("Directory: {0}", directory.Uri);
            }
        }
    }

    public CloudBlockBlob AddOrModifyItemToBlob(string userId, string itemKey)
    {
        CloudBlobContainer container = Prerequisite(userId);

        // Retrieve reference to a blob named "myblob".
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(itemKey);

        return blockBlob;

    }

    public void DownloadToFolderLocation(string userId, string itemKey, string location)
    {
        CloudBlobContainer container = Prerequisite(userId);

        // Retrieve reference to a blob named "photo1.jpg".
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(itemKey);

        // Save blob contents to a file.
        using (var fileStream = System.IO.File.OpenWrite(location))
        {
            blockBlob.DownloadToStream(fileStream);
        } 
    }

    public string DownloadAsStream(string userId, string itemKey)
    {
        CloudBlobContainer container = Prerequisite(userId);

        // Retrieve reference to a blob named "myblob.txt"
        CloudBlockBlob blockBlob2 = container.GetBlockBlobReference(itemKey);

        string text;
        using (var memoryStream = new MemoryStream())
        {
            blockBlob2.DownloadToStream(memoryStream);
            text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
        }
        return text;
    }

    public void DeleteBlobFile(string userId, string itemKey)
    {
        CloudBlobContainer container = Prerequisite(userId);

        // Retrieve reference to a blob named "myblob.txt".
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(itemKey);

        // Delete the blob.
        blockBlob.Delete();
    }

  }
  }
于 2015-04-30T20:28:51.517 に答える