ASP.Net MVC-odczyt pliku z HttpPostedFileBase bez zapisu

Przesyłam plik za pomocą opcji przesyłania plików. I wysyłam ten plik bezpośrednio z widoku do kontrolera w metodzie POST, jak,

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

Załóżmy, że wgrywam Plik z notatnikiem. Jak odczytać ten plik i dołączyć ten tekst do string builder, bez zapisywania tego pliku....

/ Align = "left" / Ale jak odczytać ten plik z HttpPostedFileBase bez zapisu?
Author: tshepang, 2013-04-16

4 answers

Można to zrobić za pomocą httpPostedFileBase Klasa zwraca HttpInputStreamObject zgodnie z podanym tutaj

Należy przekonwertować strumień na tablicę bajtów, a następnie odczytać zawartość pliku

Proszę odnieść się do poniższego linku

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

Hope this helps

Aktualizacja:

Strumień, który otrzymujesz z połączenia HTTP jest sekwencyjny tylko do odczytu (nie-seekable), A Strumień plików można odczytywać/zapisywać. Będziesz trzeba najpierw odczytać cały strumień z wywołania HTTP na bajt array, następnie utwórz strumień plików z tej tablicy.

Wzięte z tutaj

// 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);
 77
Author: Thangamani Palanisamy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-27 10:03:47

Alternatywą jest użycie Streamreadera.

public void FunctionName(HttpPostedFileBase file)
{
    string result = new StreamReader(file.InputStream).ReadToEnd();
}
 43
Author: Richard YS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-04 10:54:56

Mała zmiana w odpowiedzi Thangamani Palanisamy, która pozwala na usunięcie czytnika binarnego i koryguje problem z długością wejściową w swoich komentarzach.

string result = string.Empty;

using (BinaryReader b = new BinaryReader(file.InputStream))
{
  byte[] binData = b.ReadBytes(file.ContentLength);
  result = System.Text.Encoding.UTF8.GetString(binData);
}
 9
Author: Stig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 12:07:26

Byte [] data; using (Stream inputStream=file.Inputstream) {MemoryStream memoryStream = inputStream as MemoryStream; if (memoryStream == null) {memoryStream = new MemoryStream (); inputStream.CopyTo (memoryStream);} data = memoryStream.ToArray ();}

 0
Author: Jawad Raza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-02 19:57:16