2012-10-25 13 views
8

Ich verwende die Version von MVC, die mit Visual Studio 2012 Express geliefert wurde. (Microsoft.AspNet.Mvc.4.0.20710.0)Eine Datei hochladen MVC 4 Web API .NET 4

Ich nehme an, das ist RTM-Version.

public Task<HttpResponseMessage> PostFormData() 
    { 
     // Check if the request contains multipart/form-data. 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 

     string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
     var provider = new MultipartFormDataStreamProvider(root); 

     // Read the form data and return an async task. 
     var task = Request.Content.ReadAsMultipartAsync(provider). 
      ContinueWith<HttpResponseMessage>(t => 
      { 
       if (t.IsFaulted || t.IsCanceled) 
       { 
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); 
       } 

       // This illustrates how to get the file names. 
       foreach (MultipartFileData file in provider.FileData) 
       { 
        Trace.WriteLine(file.Headers.ContentDisposition.FileName); 
        Trace.WriteLine("Server file path: " + file.LocalFileName); 
       } 
       return Request.CreateResponse(HttpStatusCode.OK); 
      }); 

     return task; 
    } 

Aber dieser Code immer in ContinueWith endet, wo t.IsFaulted == true:

Ich habe viele Beispiele online, die alle diesen Code verwenden gefunden. Die Ausnahme lautet:

Unerwartetes Ende des MIME-Multipart-Stream. MIME-Multipart-Nachricht ist nicht abgeschlossen.

Hier ist mein Clientformular. Nichts Besonderes, ich möchte jQuery form pluging für Ajax upload machen, aber ich kann nicht mal so zur Arbeit kommen.

<form name="uploadForm" method="post" enctype="multipart/form-data" action="api/upload" > 
    <input type="file" /> 
    <input type="submit" value="Upload" /> 
</form> 

Ich habe gelesen, dass es durch den Parser verursacht wird erwartet/CR/LF am Ende jeder Nachricht, und dass Fehler im Juni werden behoben.

Was ich nicht herausfinden kann ist, wenn es wirklich behoben wurde, warum ist diese Version von MVC 4 nicht enthalten? Warum tun so viele Beispiele im Internet, dass dieser Code funktioniert, wenn es nicht in dieser Version von MVC 4 ist?

+1

ASP.NET-Web-API ist nicht Teil von ASP.NET MVC und es hat ein eigenes NuGet-Paket -> [ASP.NET Web API 4.0.20710.0] (http://nuget.org/packages/aspnetwebapi). Bitte überprüfen Sie, welche Version Sie verwenden. – tpeczek

Antwort

19

Ihnen fehlt ein name Attribut in Ihrer Datei input.

<form name="uploadForm" method="post" enctype="multipart/form-data" action="api/upload" > 
    <input name="myFile" type="file" /> 
    <input type="submit" value="Upload" /> 
</form> 

Eingaben ohne es werden nicht vom Browser übermittelt. Ihre Formulardaten sind also leer, sodass IsFaulted geltend gemacht wird.

Verwandte Themen