2008-12-11 7 views
129

Tôi đang sử dụng thành phần hình ảnh có phương thức FromBinary. Tự hỏi làm thế nào để chuyển đổi dòng đầu vào của tôi vào một mảng byteCách tạo mảng byte từ 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

làm thế nào chúng tôi đăng tải các tập tin trong một trang aspx? – shivi

+0

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

Trả lời

244

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

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

Như đã đề cập dưới đây bởi jeff, b.ReadBytes (file.InputStream.Length); phải là byte [] binData = b.ReadBytes (file.ContentLength); dưới dạng .Length dài trong khi ReadBytes mong đợi một int. – Spongeboy

+0

Hãy nhớ đóng BinaryReader. –

+0

Làm việc như một sự quyến rũ. Cảm ơn bạn vì giải pháp đơn giản này (với các bình luận của jeff, Spongeboy và Chris)! – David

3

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

ImageElement image = ImageElement.FromBinary(buffer); 
20
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); 
10

Nó sẽ không hoạt động nếu InputStream.Position tập tin của bạn được thiết lập để kết thúc dòng. Các dòng bổ sung của tôi:

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

bạn có thể vừa thực hiện 'file.InputStream.Position = 0; ' –

2

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

2

Đối với hình ảnh nếu sử dụng trang web của bạn v2 sử dụng WebImage Class

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream); 
byte[] imgByteArray = webImage.GetBytes();