2015-02-18 7 views
6

Ich versuche, eine Datei in ASP.NET 5 hochzuladen, aber die zwei Möglichkeiten, die ich im Internet gesehen habe, scheitern. Mit XMLHttpRequest hier ist mein Server-Seite Code:Datei hochladen ASP.NET 5

public async Task<ActionResult> UploadSWF() 
{ 
    StreamReader reader = new StreamReader(Request.Body); 
    var text = await reader.ReadToEndAsync(); 
    return View(); 
} 

[EDIT 1]: Und meine Client-Seite:

var client = new XMLHttpRequest(); 
function upload() 
{ 
    var file = document.getElementById("uploadfile"); 
    var formData = new FormData(); 
    formData.append("upload", file.files[0]); 
    client.open("post", "/Home/UploadSWF", true); 
    //client.setRequestHeader("Content-Type", "multipart/form-data"); 
    client.setRequestHeader("Content-Type", "application/x-shockwave-flash"); 
    client.send(formData); 
} 

Aber das einzige, was ich von diesem erhalten kann, ist:

------ WebKitFormBoundaryX1h5stVbtaNe6nFw Content-Disposition: Formulardaten; name = "hochladen"; filename = "data.swf" Content-Type: application/x-shockwave-flash CWS ;“

[EDIT 2]: Hier ist der Code, wie ich diese:

public ActionResult UploadSWF() 
    { 
     Stream bodyStream = Context.Request.Body; 
     var sr = new StreamReader(bodyStream); 
     var test = sr.ReadToEnd(); 
     return View(); 
    } 

So habe ich den Namen der Datei und den Content-Typ, aber nicht deren Inhalt.

Diese Antwort https://stackoverflow.com/a/26445416/1203116 den Stream in eine Datei für mich die Dateierstellung Teil jedoch ist das Kopieren nicht funktioniert, I don‘ Ich weiß, was vor sich geht, aber nichts passiert. Also habe ich das gleiche mit einem MemoryStream gemacht und ich habe eine leere Zeichenfolge bekommen.

So endlich habe ich versucht, einen anderen Weg, mit IFormFile wie hier gezeigt: https://github.com/aspnet/Mvc/blob/437eb93bdec0d9238d672711ebd7bd3097b6537d/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs Diese Schnittstelle in Microsoft.AspNet.Http sein sollte, das ich mein Projekt hinzugefügt haben, aber ich bin immer noch nicht in der Lage, darauf zuzugreifen. Ich kann keine IFormFile in diesem Namespace sehen.

[EDIT 1]: Die erste Methode, die ich versucht habe, ist durch HttpPostedFileBase mit wie ich in ASP.NET MVC 5 verwendet wurde, aber es funktioniert nicht in meinem vNext Projekt. Ich habe immer eine MissingMethodException erhalten. Mein Code auf Client-Seite war:

<form action="/home/UploadSWF" method="POST" enctype="multipart/form-data"> 
     <input type="file" name="file" accept=".swf, application/x-shockwave-flash/*"> 
     <input type="submit" name="submit" /> 
    </form> 

Und in meinem Controller:

public ActionResult UploadSWF(HttpPostedFileBase file) 
{ 
    return View(); 
} 
+0

Nicht sicher, ob es hilft, aber versuchen Sie, ein Upload-Argument HttpPostedFileBase zu Ihrem UploadSWF und sehen, ob es nicht null ist. –

+0

Ich habe das schon mal probiert. Eigentlich war es der erste Weg, den ich implementieren wollte, aber ich bekam immer eine MissingMethodException. Die Anforderung kann den Methodencontroller mit dem klassischen

nicht erreichen. Mit meinem ursprünglichen ASP.NET MVC 5-Projekt funktionierte es gut. Also habe ich versucht, etwas anderes für mein vNext-Projekt zu finden ... –

+0

Vielleicht sollten Sie auch Ihren Buchungscode hinzufügen. –

Antwort

8

IFormFile wurde im Rahmen der beta3 Version eingeführt. Sie haben wahrscheinlich veraltete Pakete. Überprüfen Sie Ihre project.json und stellen Sie sicher, dass Sie Beta3 (oder neuer) Pakete verwenden.

+0

Ich kann nur die Beta2 auf Nuget sehen http://www.nuget.org/packages/Microsoft.AspNet.Http/1.0.0-beta2 Wie kann ich diese Beta3 bekommen? –

+0

Ha ok Ich habe das nicht bekommen, nur indem ich mein Projekt geändert habe.json es wird automatisch das neueste bekommen, auch wenn Nuget es nicht zeigt. Danke Ajay –

+0

Kann nicht richtig mit der Beta3 funktioniert. Ich denke, es ist zu früh. Weißt du, wie man mit dem XmlHttpRequest umgeht? –