目标数组不够长。检查destIndex和length,以及mvc中数组的下限

时间:2019-04-23 11:55:02

标签: c# .net asp.net-mvc

我正在尝试上传图片,第三行出现以下异常:

 var file = Request.Files[0];
 var imgBytes = new Byte[file.ContentLength - 1];
 file.InputStream.Read(imgBytes, 0, file.ContentLength);
 var base64String = Convert.ToBase64String(imgBytes,0,imgBytes.Length);
 p.Photo = base64String;

2 个答案:

答案 0 :(得分:0)

您的代码说:分配(n-1)个字节,读取n个字节。

var imgBytes = new Byte[file.ContentLength]; // <- Remove - 1
file.InputStream.Read(imgBytes, 0, file.ContentLength);

答案 1 :(得分:0)

似乎在创建数组时犯了一个简单的错误,它可能是基于数组从零开始的事实(即位置从0开始)。

首先,要使其非常清楚,请考虑一个包含三个元素{A, B, C}的数组。当您将它们存储在数组中时,A将具有索引0B将具有1,而C将位于2

换句话说,最后一项将位于位置 length - 1。但是长度本身仍为3。

将其应用于您的情况,您将发现问题出在这里:

 var imgBytes = new Byte[file.ContentLength - 1];

删除-1,它应该可以工作。

另一方面,如果您需要直接读取数组的最后一个字节,则可以使用file.ContentLength - 1来访问它。