2

( DHC by Restlet ) から C# API に画像をアップロードしようとしています。将来的には、この API を Android または iPhone アプリから呼び出したいと考えていますが、そのようなデバイスに実装する前に、この部分を機能させる必要があると考えました。

この C# コードは、api:s ValuesController に配置されます。デフォルトで呼び出すコントローラー。以下のメソッドがアクセス可能であり、適切に呼び出されることを (ブレークポイントを介して) 確認しました。

public async 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);

        try
        {
            // Read the form data.
            await Request.Content.ReadAsMultipartAsync(provider);

            // 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);
        }
        catch (System.Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }
    }

..ただし、サービスに.pngを投稿しようとすると、次のエラーが発生します。

System.IO.IOException was caught
  HResult=-2146232800
  Message=Unexpected end of MIME multipart stream. MIME multipart message is not complete.
  Source=System.Net.Http.Formatting
  StackTrace:
   at System.Net.Http.Formatting.Parsers.MimeMultipartBodyPartParser.<ParseBuffer>d__0.MoveNext()
   at System.Net.Http.HttpContentMultipartExtensions.MoveNextPart(MultipartAsyncContext context)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Nutris.Webapi.Controllers.ValuesController.<PostFormData>d__12.MoveNext() in c:\Users\Simon\Documents\GitHub\Nutris\Nutris.Webapi\Controllers\ValuesController.cs:line 836

内部例外:

次の行で発生します。

 await Request.Content.ReadAsMultipartAsync(provider);

私は何を逃したのですか?上記の方法の MIME タイプについて言及するのを忘れていたようです。

4

2 に答える 2

0

サイモン、入力コントロールに 'name' を追加してみてください。

<input type="file" id="fileInput" name="fileInput"/> 

ASP.NET Web API、Flex FileReference からのアップロード時に MIME マルチパート ストリームが予期せず終了する

于 2016-02-01T22:51:33.543 に答える