2008-12-11 10 views
129

Ich verwende eine Bildkomponente mit einer FromBinary-Methode. Sie fragen sich, wie konvertiere ich meine Eingangsstrom in ein Byte-ArraySo erstellen Sie ein Byte-Array aus 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

wie werden wir die Datei in einem anderen ASPX-Seite veröffentlichen? – shivi

+0

Fehlt diese Zeile ** file.InputStream.Read (buffer, 0, file.ContentLength); ** fülle den Puffer mit Bytes aus dem Eingabestream? Warum sollten wir ** BinaryReader.ReadBytes (...) ** verwenden, wie von @Wolfwyrd in der Antwort unten erwähnt? Wird nicht ** ImageElement.FromBinary (buffer); ** das Problem beheben? –

Antwort

244

Verwenden Sie ein Binary Objekt ein Byte-Array aus dem Strom zurück wie:

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

Wie unten von Jeff erwähnt, b.ReadBytes (file.InputStream.Length); sollte sein byte [] binData = b.ReadBytes (file.ContentLength); als .Length ist eine lange, während ReadBytes eine int erwartet. – Spongeboy

+0

Denken Sie daran, den BinaryReader zu schließen. –

+0

Arbeiten wie ein Charme. Danke für diese einfache Lösung (mit den Kommentaren von Jeff, Spongeboy und Chris)! – David

3

in Ihrer Frage, die beide Puffer und byteArray scheinen Be Byte []. Also:

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

Linie 2 soll mit

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

ersetzt werden Es wird nicht funktionieren, wenn Ihre Datei InputStream.Position bis zum Ende des Stromes gesetzt. Meine zusätzlichen Zeilen:

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

Sie hätten einfach 'file.InputStream.Position = 0; ' –

2

vor stream.copyto, müssen Sie stream.position auf 0 zurückgesetzt; dann es funktioniert gut.

2

Für Bilder, wenn Ihr mit Web-Seiten die verwenden v2 WebImage Class

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