【问题标题】:Azure Blob Storage - 404 when i save to fileAzure Blob 存储 - 当我保存到文件时出现 404
【发布时间】:2019-10-01 21:51:48
【问题描述】:

我在使用 Azure Blob 存储时遇到了另一个问题,这次是下载问题。我得到一个没有问题的文件列表,不幸的是,当我想下载它时,我收到一个 404 错误,表明找不到文件。

using System.IO;
using System.Linq;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

namespace BlobStorage
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudStorageAccount backupStorageAccount = CloudStorageAccount.Parse(
                "{connectionString}");

            var backupBlobClient = backupStorageAccount.CreateCloudBlobClient();
            var backupContainer = backupBlobClient.GetContainerReference("{container-name");

            var list = backupContainer.ListBlobs(useFlatBlobListing: true);

            foreach (var blob in list)
            {
                var blobFileName = blob.Uri.Segments.Last();
                CloudBlockBlob blockBlob = backupContainer.GetBlockBlobReference(blobFileName);

                string destinationPath = string.Format(@"D:\" + blobFileName +".txt");

                blockBlob.DownloadToFile(destinationPath, FileMode.OpenOrCreate);
            }
        }
    }
}

错误信息:

Microsoft.WindowsAzure.Storage.StorageException:“远程服务器 返回错误:(404)未找到。”

内部异常WebException:远程服务器返回错误: (404) 未找到。

并指向行:

blockBlob.DownloadToFile (destinationPath, FileMode.OpenOrCreate);

像这样的文件最常存在于 Blob 存储中。当我进入blob版本时,将url复制到一个文件中,我可以通过浏览器毫无问题地下载它。不幸的是,由于 404 错误,我无法从应用程序级别下载它。

为什么会有这样的文件存在?

【问题讨论】:

  • 您的 blob 是否在虚拟文件夹中?
  • 是的,示例路径 tempdata/ExampleIotHub/02/2019/05/14/39

标签: azure azure-storage azure-blob-storage


【解决方案1】:

问题在于您如何在以下代码行中获取 blob 名称:

var blobFileName = blob.Uri.Segments.Last();

考虑到路径是tempdata/ExampleIotHub/02/2019/05/14/39,blob 的名称是ExampleIotHub/02/2019/05/14/39(假设您的容器名称是tempdata)但是您得到的blobFileName 只有39(请参见示例here)。由于没有名为 39 的 blob,因此您会收到此 404 错误。

我建议您尝试执行以下操作:

foreach (var blob in list)
{
    var localFileName = blob.Uri.Segments.Last();
    CloudBlockBlob blockBlob = blob as CloudBlockBlob;
    if (blockBlob != null)
    {
      string destinationPath = string.Format(@"D:\" + localFileName +".txt");

      blockBlob.DownloadToFile(destinationPath, FileMode.OpenOrCreate);
    }
}

请注意,我没有尝试运行此代码,因此可能会出现一些错误。

【讨论】:

  • 嘿,谢谢您的回答 :) 您的代码已经解决了我的问题,现在它可以正确保存文件。非常感谢您的帮助。
猜你喜欢
  • 2020-08-25
  • 2021-09-20
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 2020-01-06
  • 2021-10-15
  • 2021-03-19
  • 1970-01-01
相关资源
最近更新 更多