[英]Azure Blob Source Error: The remote server returned an error: (400) Bad Request
[英]PutBlock Error: The remote server returned an error: (400) Bad Request while uploading file to Azure
我面臨着遠程服務器返回錯誤400,將文件作為塊Blob上傳到Azure時的錯誤請求的問題。 但是奇怪的是,有時代碼可以用於上載特定文件,而有時它對於同一文件失敗。
我的代碼就像-
List<string> blockIdList = new List<string>();
using (var file = new FileStream(_path, FileMode.Open, FileAccess.Read))
{
int blockId = 0;
int blockSize = 4096;
// open file
while (file.Position < file.Length)
{
// calculate buffer size (blockSize in KB)
long bufferSize = blockSize * 1024 < file.Length - file.Position ? blockSize * 1024 : file.Length - file.Position;
byte[] buffer = new byte[bufferSize];
// read data to buffer
file.Read(buffer, 0, buffer.Length);
// save data to memory stream and put to storage
using (var stream = new MemoryStream(buffer))
{
// set stream position to start
stream.Position = 0;
convert block id to Base64 Encoded string
var blockIdBase64 = Convert.ToBase64String(System.BitConverter.GetBytes(blockId));
blockBlob.PutBlock(blockIdBase64, stream, null);
blockIdList.Add(blockIdBase64);
// increase block id
blockId++;
}
}
blockBlob.PutBlockList(blockIdList);
file.Close();
}
不知道為什么會拋出此錯誤並尋找可能的解決方案。
謝謝
我注意到的一件事是您使用整數值作為blockId
。 這可能是您的上傳失敗的原因之一,因為所有blockId的長度必須相同。 因此,如果文件被分成10個塊(blockId = 0-9),則您的上傳代碼將起作用。 但是,如果文件分成10個以上的塊,則上傳將失敗。
我的建議是用0填充字符串,以便所有blockId的長度都相同。 由於您可以將一個Blob最多分為50,000個塊,因此執行blockId.ToString(“ d6”)應該可以解決問題。
您可能還會發現此博客文章有用: http : //gauravmantri.com/2013/05/18/windows-azure-blob-storage-dealing-with-the-specified-blob-or-block-content-is-invalid -錯誤/ 。
我也面臨這個問題。 我給AzCopy命令提供了一些不正確的參數,僅此而已-我發布的每個新的AzCopy都開始出現該令人沮喪的錯誤。 在互聯網上查找了很多東西,包括Gaurav Mantri的博客文章。 他談到“提交”未提交的塊。
我發現從容器中“清除”所有該死的塊的一種簡單方法是使用稱為“ Azure Storage Explorer ”的工具。 它似乎顯示了所有塊-只需選中它們並對其全部進行核對即可。 發布此刪除后,我的AzCopy正常工作!
(請注意,這些無效或未提交的塊不會顯示在azure管理門戶上-奇怪為什么azure團隊不直接支持它。這確實是PITA:-/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.