目标阵列不够长。检查 destIndex 和长度,以及数组的下限(以 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;

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

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

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

首先,为了非常清楚地说明这一点,请考虑一个应该包含三个元素的数组,{A, B, C} 。当你将它们存储在数组中时,A将具有索引0B将具有1,并且C将处于2

换句话说,最后一项将在位置length - 1。不过,长度本身仍将是 3。

将其应用于您的情况,您将意识到问题出在这里:

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

取下-1,它应该可以工作。

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

最新更新