Azure Blob存储-保存到文件时为404

Azure Blob存储-保存到文件时为404,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我对Azure Blob存储还有另一个问题,这次是下载。我得到了一个没有问题的文件列表,不幸的是,当我想下载它时,我得到了一个404错误,文件没有找到 using System.IO; using System.Linq; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; namespace BlobStorage { class Program {

我对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名称:

var blobFileName = blob.Uri.Segments.Last();
考虑到路径是
tempdata/ExampleIotHub/02/2019/05/14/39
,blob的名称是
ExampleIotHub/02/2019/05/14/39
(假设您的容器名称是
tempdata
),但是您得到的blobFileName只有39(请参见示例)。由于没有名为
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);
    }
}

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

您的blob是否在虚拟文件夹中?是的,示例路径tempdata/ExampleIotHub/02/2019/05/14/39嘿,谢谢您的回答:)您的代码解决了我的问题,现在它正确地保存了文件。非常感谢你的帮助。