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.