[英]Azure Blob Storage - 404 when i save to file
我有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
,斑的名字是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);
}
}
請注意,我沒有嘗試運行此代碼,因此可能會出現一些錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.