2013-04-16 17 views
44

Przesyłam plik za pomocą opcji przesyłania plików. A ja wysłać ten plik bezpośrednio z widoku do kontrolera w metodzie POST jak,ASP.Net MVC - odczytywanie pliku z HttpPostedFileBase bez zapisywania

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

Załóżmy, ja przesyłając plik Notatnika. Jak mogę przeczytać ten plik & dołączyć ten tekst do konstruktora ciągu, bez zapisywania tego pliku ....

Jestem świadomy po SaveAs tego pliku, możemy przeczytać ten plik. Ale jak mogę odczytać ten plik z HttpPostedFileBase bez zapisania?

Odpowiedz

62

Można to zrobić za pomocą httpPostedFileBase klasę zwraca HttpInputStreamObject jak za określony here

Należy przekształcić strumień do tablicy bajtów, a następnie można odczytać zawartość pliku

Patrz poniższy link

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

Nadzieja to pomaga

UPDATE:

Strumień, który otrzymuje się od wywołania HTTP jest tylko do odczytu sekwencyjnego (nie da się przewijać) i FileStream jest odczyt/zapis możliwy do przeszukania. Najpierw musisz odczytać cały strumień z wywołania HTTP do tablicy bajtowej , a następnie utworzyć obiekt FileStream z tej tablicy.

Zrobione z here

// 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); 
+1

http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

+4

PS: b.ReadBytes() chce int ale plik.InputStream.Length jest długi –

+2

, ale file.InputStream.ContentLength jest int –

34

Alternatywą jest użycie StreamReader.

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

to będzie pusto stream making file.Length = 0 – PUG

+3

zgodził się, ale w wielu przypadkach jest to w porządku. –

+2

Mimo że +1, nie pozbawiasz "IDisposable". –

5

Nieznaczna zmiana Thangamani Palanisamy odpowiedź, która pozwala czytelnikowi Binary być usuwane i koryguje długość wejściowego kwestię 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); 
} 
Powiązane problemy