Массив назначения был недостаточно длинным. Проверьте destIndex и длину, а также нижние границы массива в mvc - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь загрузить изображение и получаю следующее исключение в третьей строке:

 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 голосов
/ 23 апреля 2019

Кажется, вы делаете простую ошибку при создании массива, и это, вероятно, коренится в том факте, что массивы начинаются с нуля (то есть позиции начинаются с 0).

Во-первых, чтобы сделать это предельно ясным, рассмотрим массив, который должен содержать три элемента, {A, B, C}. Когда вы сохраняете их в массиве, A будет иметь индекс 0, B будет иметь 1, а C будет иметь значение 2.

Другими словами, последний элемент будет в позиции length - 1. Сама длина все равно будет 3.

Примените это к вашей ситуации, и вы поймете, что проблема заключается здесь:

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

Удалите -1 и все должно работать.

Если бы вам нужно было читать непосредственно с последнего байта в вашем массиве, с другой стороны, вы бы использовали file.ContentLength - 1 для доступа к нему.

0 голосов
/ 23 апреля 2019

Ваш код говорит: выделить (n - 1) байтов, прочитать n байтов.

var imgBytes = new Byte[file.ContentLength]; // <- Remove - 1
file.InputStream.Read(imgBytes, 0, file.ContentLength);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...