Преобразование HttpPostedFileBase в байт []

В моем приложении MVC я использую следующий код для загрузки файла.

MODEL

 public HttpPostedFileBase File { get; set; }

VIEW

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

Все работает нормально.. Но я пытаюсь преобразовать результат fiel в байт []. Как я могу это сделать

CONTROLLER

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

Ответ 1

Как говорит Дарин, вы можете читать из потока ввода - но я бы не стал полагаться на все данные, доступные за один раз. Если вы используете .NET 4, это просто:

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

Достаточно легко записать эквивалент CopyTo в .NET 3.5, если хотите. Важная часть состоит в том, что вы читаете HttpPostedFileBase.InputStream.

Для эффективных целей вы можете проверить, является ли возвращенный поток уже 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();
}

Ответ 2

Вы можете прочитать его из входного потока:

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
    }
    ...
}

И если вы намерены напрямую сохранить файл на диск, вы можете использовать метод model.File.SaveAs. Вы можете найти следующее сообщение в блоге.