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