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.