Cách tạo mảng byte từ HttpPostedFile


155

Tôi đang sử dụng một thành phần hình ảnh có phương thức FromBinary. Tự hỏi làm thế nào để tôi chuyển đổi luồng đầu vào của mình thành một mảng byte

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

ImageElement image = ImageElement.FromBinary(byteArray);

Làm thế nào chúng ta đăng tập tin trong một trang .aspx khác?
shivi

Không phải dòng này file.InputStream.Read (đệm, 0, file.ContentLpm); điền vào bộ đệm với byte từ luồng đầu vào? Tại sao chúng ta nên sử dụng BinaryReader.ReadBytes (...) như được đề cập bởi @Wolfwyrd trong câu trả lời dưới đây? Không ImageEuity.FromBinary (bộ đệm); khắc phục sự cố?
Srinidhi Shankar

Câu trả lời:


290

Sử dụng một đối tượng BinaryReader để trả về một mảng byte từ luồng như:

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

1
Như được đề cập dưới đây bởi jeff, b.ReadBytes (file.InputStream.Ldrops); nên là byte [] binData = b.ReadBytes (file.ContentLpm); như .Lipse là một dài trong khi ReadBytes mong đợi một int.
Spongeboy

Nhớ đóng BinaryReader.
Chris Dwyer

Làm việc như một cơ duyên. Cảm ơn bạn vì giải pháp đơn giản này (với ý kiến ​​của jeff, Spongeboy và Chris)!
David

29
Đầu đọc nhị phân không cần phải đóng, bởi vì có một cách sử dụng đó là tự động đóng đầu đọc khi xử lý
BeardinaSuit

1
Bất cứ ý tưởng về lý do tại sao điều này sẽ không làm việc cho một tệp .docx? stackoverflow.com/questions/19232932/ từ
wilsjd

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

dòng 2 nên được thay thế bằng

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

12

Nó sẽ không hoạt động nếu tệp InputStream.Pocation của bạn được đặt ở cuối luồng. Dòng bổ sung của tôi:

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

3

trong câu hỏi của bạn, cả bộ đệm và byteArray dường như là byte []. Vì thế:

ImageElement image = ImageElement.FromBinary(buffer);

2

trước stream.copyto, bạn phải đặt lại stream.poseition thành 0; sau đó nó hoạt động tốt


2

Đối với hình ảnh nếu bạn sử dụng Trang web v2, hãy sử dụng Lớp WebImage

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.