ASP.Net MVC - чтение файла из HttpPostedFileBase без сохранения
Я загружаю файл, используя параметр загрузки файлов. И я напрямую отправляю этот файл из View в Controller в методе POST, например,
[HttpPost]
public ActionResult Page2(FormCollection objCollection)
{
HttpPostedFileBase file = Request.Files[0];
}
Предположим, я загружаю файл блокнота. Как прочитать этот файл и добавить этот текст в построитель строк, не сохраняя этот файл....
Я знаю, что после SaveAs
этого файла мы можем прочитать этот файл. Но как читать этот файл из HttpPostedFileBase
без сохранения?
Ответы
Ответ 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);
}