2013-04-16 4 views
44

Ich lade die Datei mithilfe der Option zum Hochladen von Dateien. Und es ist direkt diese Datei aus View senden wie in POST-Methode an der SteuerungASP.Net MVC - Datei aus HttpPostedFileBase ohne Speichern lesen

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

Angenommen, ich eine Editor-Datei bin hochladen. Wie lese ich diese Datei & diesen Text String Builder ,, ohne diese Datei speichern ....

Ich bin mir bewusst über nach SaveAs diese Datei, können wir diese Datei lesen. Aber wie lese ich diese Datei von ohne speichern?

Antwort

62

Diese httpPostedFileBase-Klasse gibt die HttpInputStreamObject getan werden kann, wie pro here

angegeben Sie sollten den Strom in Byte-Array umwandeln und dann können Sie Dateiinhalt

Bitte beachten Sie folgenden Link

lesen

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

hoffe, das hilft

UPDATE:

Der Strom, den Sie von Ihrem HTTP-Aufruf erhalten ist schreibgeschützt sequentielle (nicht durchsuchbar) und die Filestream gelesen/seekable schreiben. Sie werden müssen zuerst den gesamten Stream aus dem HTTP-Aufruf in ein Byte Array lesen, dann erstellen Sie den FileStream von diesem Array.

Entnommen 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

P. S. b.ReadBytes() will einen int aber file.InputStream.Length ist ein langer –

+2

aber file.InputStream.ContentLength ist ein int –

34

Eine Alternative ist Stream zu verwenden.

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

das wird die leeren stream making file.Length = 0 – PUG

+3

vereinbart, aber in vielen Fällen ist das in Ordnung. –

+2

Obwohl +1, Sie entsorgen kein 'IDisposable'. –

5

Eine leichte Veränderung zu Thangamani Palanisamy Antwort, die das Binary Reader ermöglicht in seinen Kommentaren zu entsorgenden und korrigiert die Eingabelänge Problem.

string result = string.Empty; 

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