Как создать байтовый массив из 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);

6 ответов

Решение

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

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

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

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

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

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

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

ImageElement image = ImageElement.FromBinary(buffer);

Перед stream.copyto необходимо сбросить stream.position в 0; тогда работает нормально.

Для изображений, если вы используете Web Pages v2, используйте класс WebImage

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
Другие вопросы по тегам