簡體   English   中英

PutBlock錯誤:遠程服務器將文件上傳到Azure時返回錯誤:(400)錯誤的請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM