2

我正在尝试将图像从(DHC by Restlet)上传到我的 C# API。将来我想从 Android 或 iPhone 应用程序调用此 API,但我认为在任何此类设备上实现它之前我需要这部分工作。

这段 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);

我错过了什么?感觉就像我忘记提及上述方法的 mimetype 一样。

4

2 回答 2

0

检查正在发送数据的输入。

确保它的基本属性设置如下:

  • 姓名:
  • 类型:
  • 价值:(我不认为这是必要的。)

    <input type="file" name="dataFile" value="Choose..."  multiple/>
    

这些都是 MIME 被认为是完整的并且可以由您的处理程序正确映射所必需的。

您应该发布代码的 HTML 端,以确保它是相同的问题。

于 2014-03-15T18:03:10.933 回答
0

西蒙,尝试将“名称”添加到您的输入控件中,您可能会错过它。

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

ASP.NET Web API,从 Flex FileReference 上传时 MIME 多部分流意外结束

于 2016-02-01T22:51:33.543 回答