2008-12-11 10 views
129
'dan

bayt dizisi nasıl oluşturulur Bir FromBinary yöntemine sahip bir görüntü bileşeni kullanıyorum. Merak nasıl gibi akışından bir bayt dizisi dönmek için bir bayt dizisiHttpPostedFile

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

kullanabilir v2 olur? – shivi

+0

Bu satır değil mi? File.InputStream.Read (buffer, 0, file.ContentLength); ** arabelleği giriş akışından baytlarla doldurun mu? Aşağıdaki cevapta @Wolfwyrd tarafından belirtildiği gibi neden ** BinaryReader.ReadBytes (...) ** kullanmalıyız? ** ImageElement.FromBinary (buffer); ** sorunu çözmeyecek mi? –

cevap

244

kullanın BinaryReader nesne içine benim giriş akışı dönüştürebilirim: sorunuzu

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

Aşağıda, jeff tarafından belirtildiği gibi, b.ReadBytes (file.InputStream.Length); bayt [] binData = b.ReadBytes (dosya.ContentLength) olmalıdır; .Length uzun iken ReadBytes bir int bekler. – Spongeboy

+0

BinaryReader'ı kapatmayı unutmayın. –

+0

Bir çekicilik gibi çalışın. Bu basit çözüm için teşekkür ederiz (jeff, Spongeboy ve Chris'in yorumları ile)! – David

3

, hem tampon ve görünüyor ByteArray bayt olmak []. Yani:

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

hat 2 dosya InputStream.Position akışının sonuna ayarlanırsa İşe yaramaz

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

ile değiştirilmelidir. Benim ek satırlar:

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

sadece 'file.InputStream.Position =' 0; ' –

2

stream.copyto önce, 0 olarak stream.position sıfırlamak gerekir; o zaman iyi çalışıyor.

2
görüntüler için

senin kullanarak Web Sayfaları nasıl başka .aspx sayfası dosyasını gönderiyorsunuz WebImage Class

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