读取MIME多部分正文部分时出错。 ---> System.Web.HttpException:客户端已断开连接

时间:2017-04-10 11:27:41

标签: c# asp.net asp.net-web-api asp.net-web-api2

我正在尝试接收此Multipart Post消息:

 POST /api/Image/Upload HTTP/1.1 Host: ServerName Content-Type:
 multipart/form-data;
 boundary=-------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D
 Connection: keep-alive Accept: */* filename: DefaultPrefix1.jpg
 User-Agent: KameraApp/1 CFNetwork/808.3 Darwin/16.3.0 Content-Length:
 5492253 Accept-Language: da-dk Accept-Encoding: gzip, deflate

 ---------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D Content-Disposition: form-data; name='image';
 filename="DefaultPrefix1.jpg" Content-Type: image/jpg

 Image Data 
End boundary

我正在尝试这样做:

[RoutePrefix("api/Image")]
    public class ImageController : ApiController
    {

        [HttpPost]
        [Route("Upload")]
        public async Task<IHttpActionResult> UploadAsync()
        {
            var uploadPath = HostingEnvironment.MapPath("/") + "Uploads";

            Directory.CreateDirectory(uploadPath);

            var provider = new MultipartFormDataStreamProvider(uploadPath);

            await Request.Content.ReadAsMultipartAsync(provider);

            // Files
            //
            foreach (MultipartFileData file in provider.FileData)
            {
                Debug.WriteLine(file.Headers.ContentDisposition.FileName);
                Debug.WriteLine("File path: " + file.LocalFileName);
            }

            // Form data
            //
            foreach (var key in provider.FormData.AllKeys)
            {
                foreach (var val in provider.FormData.GetValues(key))
                {
                    Debug.WriteLine(string.Format("{0}: {1}", key, val));
                }
            }

            return Ok("Working"); 
        }
    }

我还要根据文件的大小添加它

  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2"  maxRequestLength ="100000"/>
  </system.web>

我可以看到文件的一部分已上传到上传文件夹但我一直遇到客户端断开连接的问题..我没有遇到这个问题,因为PHP脚本只是拿起文件然后移动它到我选择的文件夹我不是PHP开发人员所以我现在选择了一些更舒服的东西来构建一个更高级的版本,但是我很难接收到该文件..

对我做错的任何建议?

我已经尝试恢复到在mac服务器上运行的PHP脚本,看看它是否是更基本的东西。当我在Windows服务器上运行PHP脚本时,我得到了

  

[Tue Apr 11 12:38:05 2017] [IP]:[端口号]无效请求(意外的EOF)

当我在mac上运行PHP脚本以进行应用程序测试时,没有发生这种情况。所以现在我的问题是它可能与我在Web API上遇到的EOF问题相同。以及如何解决EOF问题?我不认为我可以在Windows中解决它,因为Windows无法找到文件的结尾。 ?

1 个答案:

答案 0 :(得分:1)

尝试将Content-Disposition=form-data替换为Content-Disposition=attachment

---------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D
Content-Type: image/jpg
Content-Disposition: attachment; filename="DefaultPrefix1.jpg"; name="image"