Cara membuat array byte dari HttpPostedFile

155

Saya menggunakan komponen gambar yang memiliki metode FromBinary. Ingin tahu bagaimana cara mengubah aliran input saya menjadi array byte

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

ImageElement image = ImageElement.FromBinary(byteArray);
sangat dingin
sumber
bagaimana kita memposting file di halaman .aspx lain?
shivi
Tidakkah ini file baris.InputStream.Read (buffer, 0, file.ContentLength); isi buffer dengan byte dari aliran input? Mengapa kita harus menggunakan BinaryReader.ReadBytes (...) seperti yang disebutkan oleh @Wolfwyrd dalam jawaban di bawah ini? Tidak akan ImageElement.FromBinary (buffer); memperbaiki masalah?
Srinidhi Shankar

Jawaban:

290

Gunakan objek BinaryReader untuk mengembalikan array byte dari aliran seperti:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
Wolfwyrd
sumber
1
Seperti yang disebutkan di bawah oleh jeff, b.ReadBytes (file.InputStream.Length); harus byte [] binData = b.ReadBytes (file.ContentLength); sebagai. Panjang adalah panjang sedangkan ReadBytes mengharapkan int.
Spongeboy
Ingatlah untuk menutup BinaryReader.
Chris Dwyer
Bekerja seperti pesona. Terima kasih atas solusi sederhana ini (dengan komentar jeff, Spongeboy dan Chris)!
David
29
Pembaca biner tidak harus ditutup, karena ada penggunaan yang secara otomatis menutup pembaca yang ada
BeardinaSuit
1
Adakah ide mengapa ini tidak berhasil untuk file .docx? stackoverflow.com/questions/19232932/…
wilsjd
25
BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.InputStream.Length);

baris 2 harus diganti dengan

byte[] binData = b.ReadBytes(file.ContentLength);
Andre Figueiredo
sumber
12

Ini tidak akan berfungsi jika file Anda InputStream.Posisi diatur ke akhir aliran. Baris tambahan saya:

Stream stream = file.InputStream;
stream.Position = 0;
tinamou
sumber
3

dalam pertanyaan Anda, buffer dan byteArray tampaknya merupakan byte []. Begitu:

ImageElement image = ImageElement.FromBinary(buffer);
devio
sumber
2

sebelum stream.copyto, Anda harus mengatur ulang stream.position ke 0; maka itu berfungsi dengan baik.

xpfans
sumber
2

Untuk gambar jika Anda menggunakan Halaman Web v2 gunakan Kelas WebImage

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