c# - 从 Azure 下载文件

标签 c# azure azure-blob-storage

有多个 blob,已将每个 blob 的名称及其上次修改日期提取到列表中。 设置好下载路径,然后运行以下代码,其中 kvp.Key 是每个 blob 的名称。我的想法是我可以循环每个文件名并下载它:

 foreach (KeyValuePair<string, DateTimeOffset?> kvp in to_be_dl)
        {
            Console.WriteLine("Downloading: " + kvp.Key);

            //Console.WriteLine(kvp.Key+" "+kvp.Value);
            foreach (CloudBlockBlob blobItem in blobs)
            {

                    try
                    {
                        blobItem.DownloadToFile(downloadpath + "\\" + kvp.Key, FileMode.Create);
                        break;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        break;
                    }
            }
            Console.WriteLine("Downloaded: " + kvp.Key);
        }

有没有办法能够通过名称获取 blob 并下载相应的文件?

最佳答案

你的逻辑有问题:)。

本质上,您的外循环获取下载文件的名称,但随后您的内循环会迭代 blob,然后下载与外循环中设置的名称相同的每个 blob。

它的作用是用不同的名称多次保存内部循环中的最后一个 blob(或第一个 blob)。

这就是为什么当您解压缩文件时,即使文件名不同,您也会获得相同的内容,因为下载的是相同的 blob(即使使用不同的名称保存)。

要解决此问题,您可以使用 kvp 中的 Key 创建一个 CloudBlockBlob 实例,然后尝试下载那个 Blob 。如下所示:

        foreach (KeyValuePair<string, DateTimeOffset?> kvp in to_be_dl)
        {
            Console.WriteLine("Downloading: " + kvp.Key);
            var blob = container.GetBlockBlobReference(kvp.Key);
            try
            {
                //If the blob doesn't exist, you will get an error and then your code should move to the next key
                blob.DownloadToFile(downloadpath + "\\" + kvp.Key, FileMode.Create);
                Console.WriteLine("Downloaded: " + kvp.Key);
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed to download: " + kvp.Key);
                Console.WriteLine(e);
            }
        }

关于c# - 从 Azure 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43135970/

相关文章:

c# - Winforms:有没有办法在我的应用程序中打开表单时收到通知?

c# - 为什么每个 [TestMethod] 都会多次调用 [TestClass] 的构造函数?

c# - Azure Kubernetes .NET Core 应用程序到 Azure SQL 数据库间歇性错误 258

azure - 在 Azure 中组织环境(服务器)的最佳实践设置?

javascript - 从node.js将文件上传到Azure后如何获取blob URL

c# - 最佳实践 - 不同的程序模型/使用变量以编程方式决定表单如何创建

c# - 以逗号分隔的整数的正则表达式

mongodb - 无法启动 com.bitnami.mongodb

file-upload - 在小型 azure 实例中使用 Parallel.Foreach

c# - Azure Data Lake Gen2 - 如何使用 C# 将文件从文件夹移动到另一个文件夹