Преобразовать HttpPostedFileBase в byte [] - PullRequest
110 голосов
/ 21 октября 2011

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

МОДЕЛЬ

 public HttpPostedFileBase File { get; set; }

ПРОСМОТР

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

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

КОНТРОЛЛЕР

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

Ответы [ 2 ]

241 голосов
/ 21 октября 2011

Как говорит Дарин, вы можете читать из входного потока - но я бы не стал полагаться на все данные, доступные за один раз. Если вы используете .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();
}
26 голосов
/ 21 октября 2011

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

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. Вы можете найти следующий пост в блоге полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...