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 zHttpPostedFileBase
bez zapisu? 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);
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();
}
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);
}
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 ();}
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