我正在尝试上传图像,并在第三行出现以下异常:
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
将具有索引0
,B
将具有1
,并且C
将处于2
。
换句话说,最后一项将在位置length - 1
。不过,长度本身仍将是 3。
将其应用于您的情况,您将意识到问题出在这里:
var imgBytes = new Byte[file.ContentLength - 1];
取下-1
,它应该可以工作。
另一方面,如果您需要直接从数组中的最后一个字节读取,则可以使用 file.ContentLength - 1
来访问它。