2012-10-25 14 views
8

Visual Studio 2012 Expressに同梱のMVCを使用しています。 (Microsoft.AspNet.Mvc.4.0.20710.0)ファイルをアップロードするMVC 4 Web API .NET 4

私はこれがRTMバージョンだと仮定します。 t.IsFaulted == true continueWithに

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

しかし、このコードは常に終わる:

私はすべてこのコードを使用して、オンラインの例をたくさん見つけました。例外は次のとおりです。

予期しないMIMEマルチパートストリームの終了。 MIMEマルチパートメッセージは ではありません。

ここは私のクライアントフォームです。私はjQueryのフォームをajaxのアップロードのためにpluginしたいと思いますが、私はこの方法で作業することさえできません。

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

私はそれは、各メッセージの最後にパーサを期待/ CR/LFによって引き起こされていることを読んで、そのバグが6月に修正されました。

私が理解できないことは、実際に修正された場合、なぜこのバージョンのMVC 4が含まれていないのでしょうか?なぜこのバージョンのMVC 4ではこのコードが動作しないと言っているのですか?

+1

ASP.NET Web APIはASP.NET MVCの一部ではなく、独自のNuGetパッケージ - > [ASP.NET Web API 4.0.20710.0](http://nuget.org/packages/aspnetwebapi)を持っています。ご使用のバージョンを確認してください。 – tpeczek

答えて

19

ファイルinputname属性がありません。

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

入力しないと、ブラウザから送信されません。したがって、フォームデータは空で、IsFaultedがアサートされます。

関連する問題