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错误,我无法从应用程序级别下载它。
只有这样的文件为什么存在?
答案 0 :(得分: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(请参见示例{ {3}})。由于名称39
上没有斑点,因此出现此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);
}
}
请注意,我没有尝试运行此代码,因此可能会出现一些错误。