it-swarm-id.com

Konversi HttpPostedFileBase ke byte []

Dalam aplikasi MVC saya, saya menggunakan kode berikut untuk mengunggah file.

MODEL

 public HttpPostedFileBase File { get; set; }

VIEW

@Html.TextBoxFor(m => m.File, new { type = "file" })

Semuanya berfungsi dengan baik .. Tapi saya mencoba untuk mengubah hasil fiel ke byte []. Bagaimana saya bisa melakukan ini

CONTROLLER

 public ActionResult ManagePhotos(ManagePhotos model)
    {
        if (ModelState.IsValid)
        {
            byte[] image = model.File; //Its not working .How can convert this to byte array
        }
     }
113
Null Pointer

Seperti yang dikatakan Darin, Anda dapat membaca dari aliran input - tetapi saya akan menghindari mengandalkan semua data yang tersedia dalam sekali jalan. Jika Anda menggunakan .NET 4 ini sederhana:

_MemoryStream target = new MemoryStream();
model.File.InputStream.CopyTo(target);
byte[] data = target.ToArray();
_

Cukup mudah untuk menulis yang setara dengan CopyTo di .NET 3.5 jika Anda mau. Bagian yang penting adalah bahwa Anda membaca dari HttpPostedFileBase.InputStream .

Untuk tujuan yang efisien, Anda dapat memeriksa apakah aliran yang dikembalikan sudah MemoryStream:

_byte[] data;
using (Stream inputStream = model.File.InputStream)
{
    MemoryStream memoryStream = inputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        inputStream.CopyTo(memoryStream);
    }
    data = memoryStream.ToArray();
}
_
242
Jon Skeet

Anda dapat membacanya dari aliran input:

public ActionResult ManagePhotos(ManagePhotos model)
{
    if (ModelState.IsValid)
    {
        byte[] image = new byte[model.File.ContentLength];
        model.File.InputStream.Read(image, 0, image.Length); 

        // TODO: Do something with the byte array here
    }
    ...
}

Dan jika Anda bermaksud untuk langsung menyimpan file ke disk Anda dapat menggunakan metode model.File.SaveAs. Anda mungkin menemukan mengikuti posting blog bermanfaat.

26
Darin Dimitrov