【发布时间】:2016-12-25 10:02:40
【问题描述】:
这就是我的问题,当从 Azure Explorer 复制时,我试图加载到字符串变量中的文件的工作路径工作正常。
工作:https://container.blob.core.windows.net/files/emailtemplates/EmailMaster.html
当我尝试通过代码来做时:
[TestMethod]
public void TestMethod3()
{
string templateHtml;
var blob = AzureStorageMethods.GetAzureBlob(AzureFileFolder + "EmailMaster.html");
using (var memoryStream = new MemoryStream())
{
blob.DownloadToStream(memoryStream);
templateHtml = Encoding.UTF8.GetString(memoryStream.ToArray());
}
Assert.AreNotEqual(0, templateHtml.Length);
}
这是 GetAzureBlob 的代码:
public static CloudBlockBlob GetAzureBlob(string filename)
{
var creds = ConfigurationManager.AppSettings["azurestorageconn"];
var storageAccount = CloudStorageAccount.Parse(creds);
var client = storageAccount.CreateCloudBlobClient();
//create a blob container and make it publicly accessibile
var sampleContainer = client.GetContainerReference(ConfigurationManager.AppSettings["azurecontainer"]);
sampleContainer.CreateIfNotExists();
sampleContainer.SetPermissions(new BlobContainerPermissions()
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
var blob = sampleContainer.GetBlockBlobReference(@"files\" + filename);
return blob;
}
由于端点路径错误,无法下载流。 它回来了
不工作:https://container.blob.core.windows.net/container/files/emailtemplates/EmailMaster.html
请注意,我返回 blob 的方法将容器作为 url 的一部分,而来自 azure explorer 的路径没有。
我看不出有什么办法可以解决这个问题。我试过直接访问文件容器,但要么做错了,要么不可行。
目录树(尽管技术上在 Azure 中没有)是 mystorageaccountname/files/emailtemplates/filename。任何解决方案表示赞赏。
【问题讨论】:
-
你能分享 AzureStorageMethods.GetAzureBlob() 的代码吗?我怀疑那里缺少一些东西。
-
@Gaurav Mantri...抱歉,我打算将其包含在原始帖子中。它现在就在那里。
-
感谢您分享代码。几个问题:1)你的容器叫什么名字? 2)当您查看容器中的 blob 时,它们是否位于该容器的“文件”文件夹下? 3) 你的 URL 列出了
container.blob.core.windows.net/container。我猜第一个container指的是帐户名。我说的对吗? -
正确,我将 azure 存储帐户名称替换为“容器”。帐户名称在容器现在所在的两个地方。第二个是blob中返回的url有什么问题
-
让我感到困惑的一件事是您从哪里获得
emailtemplates?你没有在任何地方指定它。我所看到的只是您在 blob 容器中的files文件夹中期待一个名为EmailMaster.html的文件。你能澄清一下吗?也请告诉我上面 1) 和 2) 的答案。谢谢。
标签: c# azure azure-blob-storage