Подтвердить что ты не робот

ASP.Net MVC - чтение файла из HttpPostedFileBase без сохранения

Я загружаю файл, используя параметр загрузки файлов. И я напрямую отправляю этот файл из View в Controller в методе POST, например,

    [HttpPost]
    public ActionResult Page2(FormCollection objCollection)
    {
        HttpPostedFileBase file = Request.Files[0];
    }

Предположим, я загружаю файл блокнота. Как прочитать этот файл и добавить этот текст в построитель строк, не сохраняя этот файл....

Я знаю, что после SaveAs этого файла мы можем прочитать этот файл. Но как читать этот файл из HttpPostedFileBase без сохранения?

4b9b3361

Ответ 1

Это можно сделать, используя класс httpPostedFileBase, возвращает HttpInputStreamObject в соответствии с указанным здесь

Вы должны преобразовать поток в массив байтов, а затем можете прочитать содержимое файла

Пожалуйста, обратитесь к следующей ссылке

http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx]

Надеюсь, что это поможет

ОБНОВЛЕНИЕ:

Поток, который вы получаете от вашего HTTP-вызова, доступен только для чтения (недоступный для поиска), а FileStream - чтение/запись. Ты будешь необходимо сначала прочитать весь поток из HTTP-вызова в байт массив, затем создайте FileStream из этого массива.

Взято из здесь

// Read bytes from http input stream
BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.ContentLength);

string result = System.Text.Encoding.UTF8.GetString(binData);

Ответ 2

Альтернативой является использование StreamReader.

public void FunctionName(HttpPostedFileBase file)
{
    string result = new StreamReader(file.InputStream).ReadToEnd();
}

Ответ 3

Небольшое изменение в ответе Thangamani Palanisamy, которое позволяет бинарному считывателю быть удаленным и исправляет проблему длины ввода в его комментариях.

string result = string.Empty;

using (BinaryReader b = new BinaryReader(file.InputStream))
{
  byte[] binData = b.ReadBytes(file.ContentLength);
  result = System.Text.Encoding.UTF8.GetString(binData);
}