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