Как создать байтовый массив из 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);
11.12.2008 16:13:32
как мы публикуем файл на другой странице .aspx?
shivi 23.06.2015 01:42:17
Разве это не строка file.InputStream.Read (buffer, 0, file.ContentLength); заполнить буфер байтами из входного потока? Почему мы должны использовать BinaryReader.ReadBytes (...), как упомянуто @Wolfwyrd в ответе ниже? Не будет ImageElement.FromBinary (буфер); решить проблему?
Srinidhi Shankar 20.06.2017 06:00:45
6 ОТВЕТОВ
РЕШЕНИЕ

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

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
284
5.05.2011 10:17:58
Как упомянуто ниже Джеффом, b.ReadBytes (file.InputStream.Length); должен быть byte [] binData = b.ReadBytes (file.ContentLength); поскольку .Length - это long, тогда как ReadBytes ожидает int.
Spongeboy 17.12.2009 04:13:39
Не забудьте закрыть BinaryReader.
Chris Dwyer 1.06.2010 17:00:44
Работай как шарм. Спасибо за это простое решение (с комментариями Джеффа, Губки и Криса)!
David 9.06.2010 14:59:48
Двоичный ридер не должен быть закрыт, потому что есть использование, которое автоматически закрывает ридер при утилизации
BeardinaSuit 28.10.2011 13:14:15
Любая идея о том, почему это не будет работать для файла .docx? stackoverflow.com/questions/19232932/…
wilsjd 7.10.2013 19:42:36

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

ImageElement image = ImageElement.FromBinary(buffer);
3
11.12.2008 16:36:25
BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.InputStream.Length);

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

byte[] binData = b.ReadBytes(file.ContentLength);
23
2.01.2014 15:26:46

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

Stream stream = file.InputStream;
stream.Position = 0;
12
10.12.2012 17:20:33

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

2
23.01.2014 07:47:58

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

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
2
13.05.2016 11:07:47