在Windows Azure Blob存储中使用子目录

6
我正试图将文件上传到Windows Azure Blob存储。据我所知,您可以将文件上传到类似于子目录的东西中。我想将一个文件上传到Blob中,使得该文件实际上驻留在/TestContainer/subDirectory1/subDirectory2/file.png中。
// Setup the Windows Aure blob client
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("BlobStorage");
CloudBlobClient client = storageAccount.CreateCloudBlobClient();

// Retrieve the TestContainer container from blob storage
CloudBlobContainer container = client.GetContainerReference("TestContainer");
if (container.CreateIfNotExist())
  container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

// Setup the blob
CloudBlob blob = container.GetBlobReference("");

// Create the meta data for the blob
NameValueCollection metadata = new NameValueCollection();
metadata["id"] = fileID.ToString();
blob.Metadata.Add(metadata);

// Store the blob 
byte[] bytes = GetFileBytes();
blob.UploadByteArray(bytes);

我该如何上传具有目录结构的文件?链接这里提到有一种方法可以实现。但是,它没有告诉你如何操作。

谢谢!

2个回答

16

有几种方法。更简单的方法是像 @makerofthings7 已经提到的那样,只需使用 / 字符。如果你愿意,也可以使用 CloudBlobDirectory 对象。以下示例展示了两种方法。

CloudBlobContainer testContainer = blobClient.GetContainerReference("testcontainer");

//Upload using a CloudBlobDirectory object
var dir = testContainer.GetDirectoryReference("UsingCloudDirectory/foo/bar/baz/");
var blobRef = dir.GetBlockBlobReference("BlobByDir.bin");

using (MemoryStream ms = new MemoryStream(new byte[] { 0x0 }))
{
    blobRef.UploadFromStream(ms);
}

//Upload using the filename without a CloudBlobDirectory
var blobRef2 = testContainer.GetBlockBlobReference("UsingBlobName/foo/bar/baz/BlobByName.bin");
using (MemoryStream ms = new MemoryStream(new byte[] { 0x0 }))
{
    blobRef2.UploadFromStream(ms);
}

1

我相信你所要做的就是在 Blob 名称中包含子目录,例如 /my/sub/directory/file.txt

目录实际上并不存在于容器名称之外,只存在于文件名中由 / 字符分隔的字符串中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接