HttpPostedFile에서 바이트 배열을 만드는 방법


155

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);

다른 .aspx 페이지에 파일을 어떻게 게시합니까?
shivi

이 줄이 아닙니다. file.InputStream.Read (buffer, 0, file.ContentLength); 입력 스트림의 바이트로 버퍼를 채우시겠습니까? 아래 답변에서 @Wolfwyrd에서 언급 한 BinaryReader.ReadBytes (...) 를 사용해야하는 이유는 무엇 입니까? ImageElement.FromBinary (버퍼) 가 아닙니다 . 문제를 해결?
Srinidhi Shankar

답변:


290

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); byte []이어야합니다. binData = b.ReadBytes (file.ContentLength); .Length는 길지만 ReadBytes는 int를 기대합니다.
Spongeboy

BinaryReader를 닫아야합니다.
Chris Dwyer 2016 년

매력처럼 작동합니다. 이 간단한 솔루션에 감사드립니다 (jeff, Spongeboy 및 Chris의 의견 포함)!
David

29
이진 리더는 폐기 할 때 리더를 자동으로 닫는
용도

1
이것이 .docx 파일에서 작동하지 않는 이유에 대한 아이디어가 있습니까? stackoverflow.com/questions/19232932/…
wilsjd

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

2 행은

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

12

InputStream.Position 파일이 스트림의 끝으로 설정되어 있으면 작동하지 않습니다. 내 추가 라인 :

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

3

귀하의 질문에서 buffer와 byteArray는 모두 byte [] 인 것 같습니다. 그래서:

ImageElement image = ImageElement.FromBinary(buffer);

2

stream.copyto 전에 stream.position을 0으로 재설정해야합니다. 그럼 잘 작동합니다.


2

Web Pages v2를 사용하는 경우 이미지의 경우 WebImage 클래스를 사용하십시오.

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.