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);

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);
}

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);

12

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

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

3

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

ImageElement image = ImageElement.FromBinary(buffer);

2

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


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();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.