2015-02-18 33 views
6

Próbuję przesłać plik w ASP.NET 5, ale dwa sposoby, które widziałem w Internecie, zawodzą. Z XMLHttpRequest tu jest mój serwer kodu po stronie:Załaduj plik ASP.NET 5

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

[EDIT 1]: A mój po stronie klienta:

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); 
} 

Ale jedyną rzeczą, jaką mogę dostać z tego jest:

------ WebKitFormBoundaryX1h5stVbtaNe6nFw Content-Disposition: form-data; name = "upload"; filename = "data.swf" Content-Type: application/x-shockwave-flash CWS ;”

[EDIT 2]: Oto kod, jak uzyskać to:

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

Więc uzyskać nazwę pliku i typ zawartości, ale nie jego treści.

Ta odpowiedź https://stackoverflow.com/a/26445416/1203116 kopiuje strumień do pliku jednak część tworzenie pliku nie działa dla mnie, i don” wiem, co się dzieje, ale nic się nie dzieje. Więc próbowałem zrobić to samo z MemoryStream i otrzymałem pusty ciąg znaków.

Więc w końcu próbowałem inny sposób, przy użyciu IFormFile jak pokazano poniżej: https://github.com/aspnet/Mvc/blob/437eb93bdec0d9238d672711ebd7bd3097b6537d/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs Ten interfejs powinien być w Microsoft.AspNet.Http które dodałem do mojego projektu, ale nadal nie jestem w stanie go otworzyć. Nie widzę żadnego IFormFile w tym obszarze nazw.

[EDIT 1]: Pierwsza metoda Próbowałem jest za pomocą HttpPostedFileBase jakbym był używany w ASP.NET MVC 5, ale to nie działa w moim projekcie vNext. Zawsze miałem wyjątek MissingMethodException. Mój kod po stronie klienta było:

<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> 

I w moim kontrolera:

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

Nie jestem pewien, czy to pomaga, ale spróbuj umieścić argument przesyłania HttpPostedFileBase na swoim pliku UploadSWF i sprawdź, czy nie jest on pusty. –

+0

Próbowałem tego. W rzeczywistości był to pierwszy sposób, jaki chciałem zaimplementować, ale zawsze miałem wyjątek MissingMethodException. Żądanie nie może osiągnąć kontrolera metody z klasą

. W moim oryginalnym projekcie ASP.NET MVC 5 działało dobrze. Więc próbowałem znaleźć coś innego dla mojego projektu vNext ... –

+0

Być może powinieneś również dodać swój kod księgowania. –

Odpowiedz

8

IFormFile został wprowadzony jako część wydania beta3. Prawdopodobnie masz przestarzałe pakiety. Sprawdź swoją project.json i upewnij się, że używasz pakietów beta3 (lub nowszych).

+0

Widzę tylko Beta2 na Nuget http://www.nuget.org/packages/Microsoft.AspNet.Http/1.0.0-beta2 Jak mogę uzyskać Beta3? –

+0

Ha ok Nie dostałem tego, zmieniając mój project.json, automatycznie otrzyma najnowszy, nawet jeśli Nuget go nie wyświetla. Dziękujemy Ajay –

+0

Nie można uzyskać tego działa poprawnie z Beta3. Myślę, że to za wcześnie. Czy wiesz, jak radzić sobie z XmlHttpRequest? –