2017-08-21 220 views
0

早上好,Azure Blob存儲400錯誤請求

我試圖首次使用他們提供的示例代碼實現Azure博客存儲。但是,當我嘗試UploadFromStream()時,我的應用程序發生了非常廣泛的400錯誤請求錯誤。

我在這個問題上做了一堆搜索。幾乎我遇到的每件事都確定了容器或blob的命名約定是問題。這不是我的問題,我使用所有小寫等

我的代碼是沒有從他們的示例代碼不同:

連接字符串:

<add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=xxxxxx;EndpointSuffix=core.windows.net" /> 

,代碼:

// Retrieve storage account from connection string 
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

// Create the blob client 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

// Retrieve reference to a previously created container 
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); 

// Retrieve reference to a blob named "myblob" 
CloudBlockBlob blob = container.GetBlockBlobReference("myblob"); 

// Create the container if it doesn't already exist 
container.CreateIfNotExists(); 

// Create or overwrite the "myblob" blob with contents from a local file. 
using (var fileStream = System.IO.File.OpenRead(@"D:\Files\logo.png")) 
{ 
    blob.UploadFromStream(fileStream); 
} 

這裏是異常的詳細信息: enter image description here

這就是我所要做的。我能想到的唯一的另一件事是,我用HTTP而不是HTTPS在我的開發環境中運行它。不知道這可能是一個問題?

編輯: 此外,試圖在Azure的門戶directily上傳文件到容器時,我收到了一個TestAzureFileUpload.txt

驗證錯誤。詳細信息:「頁面blob 大小必須與512字節邊界對齊,當前文件大小爲 56.」

這可能與我的問題有關嗎?我在這裏錯過了一些設置?

我知道我沒有足夠的力量去幫助我確定確切的問題,但我希望有人能夠至少指出我正確的方向來解決這個問題嗎?

任何幫助,將不勝感激

+0

正如我所說,這不是我的問題。如果你看我的代碼,你可以看到我的容器和blob名稱都是小寫的。 Thx的回覆 – Nugs

+0

掩蓋了這一點,對不起。 – maccettura

+0

當你得到這個異常時,你可以展開'RequestInformation'節點幷包含所有顯示在那裏的東西。通常您會發現有關錯誤的更多信息。從您的2次嘗試中大膽猜測,我假設相關存儲帳戶的冗餘級別爲「Premium_LRS」。你能確認嗎?如果是這種情況,那麼你會得到這個錯誤,因爲'Premium_LRS'存儲帳戶只支持頁面blob,並且你正在嘗試上傳一個塊blob。 –

回答

1

我用一個高級帳戶測試代碼,並得到相同的「400錯誤的請求」爲你的。 從異常詳細信息中,您可以看到「塊blob不受支持」消息。

Here is an image of my exception details

爲了解決你的問題,我想你應該知道塊BLOB和頁面斑點之間的區別。

塊blob由塊組成,每塊由塊ID標識。您可以通過編寫一組塊並按塊ID提交來創建或修改塊blob。它們適用於像JPG,TXT,日誌等離散存儲對象。您通常將其視爲本地操作系統中的文件。 僅支持標準存儲帳戶。

頁斑點是隨機讀取優化,512字節的頁面集合和寫入操作,如VHD的。要創建頁面blob,請初始化頁面blob並指定頁面blob將增長的最大大小。事實是,頁面blob是爲Azure虛擬機磁盤設計的。 同時支持標準和高級存儲帳戶。

由於您正在使用高級存儲,即當前僅可用於在Azure虛擬機使用的磁盤上存儲數據。

所以我的建議是:

如果你希望你的應用程序,以支持流和隨機接入場景,並能夠從任何地方訪問應用程序數據。您應該使用標準帳戶使用塊blob。

如果您想提升並移動使用本機文件系統API的應用程序來讀寫數據到永久磁盤。或者您希望存儲不需要從磁盤所連接的虛擬機外部訪問的數據。你應該使用Page blobs。

參考鏈接:

Understanding Block Blobs, Append Blobs, and Page Blobs

+0

這裏是另一個參考鏈接(因爲我的聲望不足以發佈兩個鏈接)你可以知道關於 [決定何時使用Azure Blob,Azure文件或Azure數據磁盤](https://docs.microsoft.com/ en-us/azure/storage/common/storage-decide-blobs-files-disks) – Hayley244

+0

這正是我的問題!謝謝!升級我的帳戶解決了問題。 – Nugs

相關問題