2008-12-11 3 views
129

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

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

ImageElement image = ImageElement.FromBinary(byteArray); 
+0

как мы разместить файл в другой странице .aspx? – shivi 2015-06-23 01:42:17

+0

Не эта строка ** file.InputStream.Read (buffer, 0, file.ContentLength); ** заполняет буфер байтами из входного потока? Почему мы должны использовать ** BinaryReader.ReadBytes (...) **, как упоминалось в @Wolfwyrd в ответе ниже? Не будет ** ImageElement.FromBinary (buffer); ** исправить проблему? – 2017-06-20 06:00:45

ответ

244

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

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

Как указано ниже jeff, b.ReadBytes (file.InputStream.Length); должен быть байт [] binData = b.ReadBytes (file.ContentLength); как. Длина длинная, тогда как ReadBytes ожидает int. – Spongeboy 2009-12-17 04:13:39

3

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

ImageElement image = ImageElement.FromBinary(buffer); 
20
BinaryReader b = new BinaryReader(file.InputStream); 
byte[] binData = b.ReadBytes(file.InputStream.Length); 

линия 2 должна быть заменена

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

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

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

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

2

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

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream); 
byte[] imgByteArray = webImage.GetBytes(); 
Смежные вопросы