我面临远程服务器返回错误400的问题,将文件作为块blob上传到Azure时出现错误请求.但奇怪的是,有时代码可以用于上传特定文件,有时候它会因同一个文件而失败.
我的代码就像 -
ListblockIdList = new List (); 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
.这可能是您上传失败的一个原因,因为所有blockIds的长度必须相同.因此,如果将文件拆分为10个块(blockId = 0 - 9),则上传代码将起作用.但是,如果文件被拆分为10个以上的块,则上载将失败.
我的建议是用0填充字符串,以便所有的blockIds都具有相同的长度.由于您可以将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 -error /.