【问题标题】:Azure blob URL comes back incorrectly for text file loadAzure blob URL 错误地返回文本文件加载
【发布时间】: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


【解决方案1】:

请更改这行代码:

var blob = sampleContainer.GetBlockBlobReference(@"files\" + filename);

var blob = sampleContainer.GetBlockBlobReference(filename);

根据您的记录:

目录树(即使在技术上 Azure 中没有目录树) 是 mystorageaccountname/files/emailtemplates/filename。

据我了解,您的容器名称为files。使用container.GetBlockBlobReference 构造时,不需要在name 参数中再次指定容器名称。它将由图书馆负责。

【讨论】:

  • 我刚刚想通了,你
猜你喜欢
  • 2021-12-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2019-08-29
  • 2018-02-23
相关资源
最近更新 更多