Как создать массив байтов из HttpPostedFile

Я использую компонент изображения, который имеет метод FromBinary. Интересно, как преобразовать входной поток в массив байтов

HttpPostedFile file = context.Request.Files[0];
byte[] buffer = new byte[file.ContentLength];
file.InputStream.Read(buffer, 0, file.ContentLength);

ImageElement image = ImageElement.FromBinary(byteArray);

Ответ 1

Используйте объект BinaryReader для возврата массива байтов из потока, например:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

Ответ 2

BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.InputStream.Length);

строка 2 должна быть заменена на

byte[] binData = b.ReadBytes(file.ContentLength);

Ответ 3

Он не будет работать, если ваш файл InputStream.Position установлен в конец потока. Мои дополнительные строки:

Stream stream = file.InputStream;
stream.Position = 0;

Ответ 4

в вашем вопросе, как буфер, так и byteArray кажутся байтом []. Итак:

ImageElement image = ImageElement.FromBinary(buffer);

Ответ 5

перед stream.copyto, вы должны reset stream.position до 0; тогда  он отлично работает.

Ответ 6

Для изображений, если вы используете веб-страницы v2, используйте Класс WebImage

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();