วิธีการสร้างอาร์เรย์ไบต์จาก HttpPostedFile


155

ฉันใช้องค์ประกอบภาพที่มีวิธีการ FromBinary สงสัยว่าฉันจะแปลงสตรีมอินพุตเป็นอาร์เรย์ไบต์ได้อย่างไร

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

ImageElement image = ImageElement.FromBinary(byteArray);

เราจะโพสต์ไฟล์ในหน้า. aspx อื่นได้อย่างไร
shivi

ไม่ใช้ไฟล์บรรทัดนี้InputStream.Read (บัฟเฟอร์, 0, file.ContentLength); เติมบัฟเฟอร์ด้วยไบต์จากสตรีมอินพุตหรือไม่ ทำไมเราควรใช้BinaryReader.ReadBytes (... )ตามที่ระบุโดย @Wolfwyrd ในคำตอบด้านล่าง จะไม่ImageElement.FromBinary (บัฟเฟอร์); แก้ไขปัญหา?
Srinidhi Shankar

คำตอบ:


290

ใช้วัตถุ BinaryReader เพื่อส่งกลับอาร์เรย์แบบไบต์จากสตรีมเช่น:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

1
ตามที่ระบุไว้ด้านล่างโดย jeff, b.ReadBytes (file.InputStream.Length); ควรเป็นไบต์ [] binData = b.ReadBytes (file.ContentLength); as .Length นั้นยาวในขณะที่ ReadBytes คาดว่าจะเป็น int
Spongeboy

อย่าลืมปิด BinaryReader
Chris Dwyer

ทำงานเหมือนจับใจ ขอบคุณสำหรับคำตอบง่ายๆนี้ (พร้อมความเห็นของเจฟฟ์, สแปบบอยและคริส)!
David

29
ไม่จำเป็นต้องปิดเครื่องอ่านไบนารีเนื่องจากมีการใช้งานที่เป็นการปิดเครื่องอ่านอัตโนมัติเมื่อมีการทิ้ง
BeardinaSuit

1
มีความคิดเห็นใดเกี่ยวกับสาเหตุที่ทำให้สิ่งนี้ใช้ไม่ได้กับไฟล์. docx stackoverflow.com/questions/19232932/…
wilsjd

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

บรรทัดที่ 2 ควรถูกแทนที่ด้วย

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

12

มันจะไม่ทำงานหากไฟล์ InputStream.Position ของคุณถูกตั้งค่าไว้ที่ส่วนท้ายของสตรีม บรรทัดเพิ่มเติมของฉัน:

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

3

ในคำถามของคุณทั้งบัฟเฟอร์และ byteArray ดูเหมือนจะเป็นไบต์ [] ดังนั้น:

ImageElement image = ImageElement.FromBinary(buffer);

2

ก่อน stream.copyto คุณต้องรีเซ็ต stream.position เป็น 0; จากนั้นก็ใช้งานได้ดี


2

สำหรับรูปภาพถ้าคุณใช้เว็บเพจ v2 ให้ใช้ WebImage Class

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.