So erstellen Sie ein Byte-Array aus HttpPostedFile


154

Ich verwende eine Bildkomponente mit einer FromBinary-Methode. Ich frage mich, wie ich meinen Eingabestream in ein Byte-Array konvertieren kann

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

ImageElement image = ImageElement.FromBinary(byteArray);

Wie veröffentlichen wir die Datei auf einer anderen ASPX-Seite?
Shivi

Nicht diese Zeile file.InputStream.Read (buffer, 0, file.ContentLength); den Puffer mit Bytes aus dem Eingabestream füllen? Warum sollten wir BinaryReader.ReadBytes (...) verwenden, wie von @Wolfwyrd in der Antwort unten erwähnt? Wird nicht ImageElement.FromBinary (Puffer); das Problem lösen?
Srinidhi Shankar

Antworten:


289

Verwenden Sie ein BinaryReader-Objekt, um ein Byte-Array aus dem Stream zurückzugeben:

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 byte sein [] binData = b.ReadBytes (file.ContentLength); as .Length ist lang, während ReadBytes ein int erwartet.
SpongeBoy

Denken Sie daran, den BinaryReader zu schließen.
Chris Dwyer

Arbeite wie ein Zauber. Vielen Dank für diese einfache Lösung (mit den Kommentaren von Jeff, Spongeboy und Chris)!
David

29
Der binäre Leser muss nicht geschlossen werden, da es eine Verwendung gibt, die den Leser bei der Entsorgung automatisch schließt
BeardinaSuit

1
Irgendeine Idee, warum dies für eine DOCX-Datei nicht funktionieren würde? stackoverflow.com/questions/19232932/…
wilsjd

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

Zeile 2 sollte durch ersetzt werden

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

12

Es funktioniert nicht, wenn Ihre Datei InputStream.Position auf das Ende des Streams gesetzt ist. Meine zusätzlichen Zeilen:

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

3

In Ihrer Frage scheinen sowohl Buffer als auch ByteArray Byte [] zu sein. So:

ImageElement image = ImageElement.FromBinary(buffer);

2

Vor stream.copyto müssen Sie stream.position auf 0 zurücksetzen. dann funktioniert es gut.


2

Verwenden Sie für Bilder, wenn Sie Webseiten v2 verwenden, die WebImage-Klasse

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.