【问题标题】:Unexpected end of MIME multipart stream. MIME multipart message is not complete. Web API and superagentMIME 多部分流的意外结束。 MIME 多部分消息不完整。 Web API 和超级代理
【发布时间】:2016-12-31 16:16:25
【问题描述】:

我在将文件从客户端上传到 Web api 时遇到问题。我收到此错误“MIME 多部分流意外结束。MIME 多部分消息不完整。”当我试图读取多部分内容时,在控制器中。我正在使用 superagent 构建一个 React JS 客户端,这是我的请求代码:

 UploadFiles(files: File[]): Promise.IThenable<any> {

    return this.Post("/Payment/files" , {
        data: {
            files: files
        },
        headers: {
            "Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
            "Content-Disposition": "form-data; name=Foo",
        }
    });
}

这是我的控制器代码:

[Route("files")]
[HttpPost]
public async Task<HttpResponseMessage> UploadFiles()
{
        string root = Path.GetTempPath();
        var provider = new MultipartFormDataStreamProvider(root);

        Stream reqStream = Request.Content.ReadAsStreamAsync().Result;
        MemoryStream tempStream = new MemoryStream();
        reqStream.CopyTo(tempStream);

        tempStream.Seek(0, SeekOrigin.End);
        StreamWriter writer = new StreamWriter(tempStream);
        writer.WriteLine();
        writer.Flush();
        tempStream.Position = 0;

        StreamContent streamContent = new StreamContent(tempStream);
        foreach (var header in Request.Content.Headers)
        {
            streamContent.Headers.Add(header.Key, header.Value);

        }
        try
        {
            // Read the form data.
            streamContent.LoadIntoBufferAsync().Wait();

            //This is where it bugs out
            await streamContent.ReadAsMultipartAsync(provider);


            return Request.CreateResponse(HttpStatusCode.OK);
        }
        catch (Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }

}

【问题讨论】:

    标签: c# reactjs file-upload superagent


    【解决方案1】:

    我收到此错误是因为我在发布之前禁用了文件输入。如果 FILE INPUT 被禁用或没有名称属性,则不会上传文件,并且您将收到“意外的 MIME 多部分流结束。MIME 多部分消息未完成”错误消息。

    不要这样做:

    <input type="file" disabled="disabled" id="myFile" />
    

    这样做:

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

    【讨论】:

      【解决方案2】:

      我因为一个愚蠢的错误而收到此错误:我的浏览器代理/客户端(我使用的是 Postman),实际上没有选择文件

      如果您使用的是 Postman,还要检查您的标题是否合适(如该问题的其他答案和 other questions 所示):

      Content-type 字段已设置为multipart/form-data

      【讨论】:

        【解决方案3】:

        我可以通过删除我在 post 方法中手动设置的标题来解决这个问题。 Angular 6 + .NET Web API

        【讨论】:

          【解决方案4】:

          我通过这样做解决了这个问题:

           headers: {
                          "Content-Disposition": "form-data; name=Foo",
                          "enctype": "multipart/form-data"
                    }
          

          【讨论】:

            【解决方案5】:

            我认为这里的问题是由以下原因引起的:

            headers: {
                         "Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
                         "Content-Disposition": "form-data; name=Foo",
                     }
            

            我有一个类似的问题,并通过删除标头参数解决,我猜测 superagent 会自动添加它们。

            【讨论】:

            • 就我而言,我使用 Postman 并从请求中删除了标头,解决了问题。
            猜你喜欢
            • 2022-07-12
            • 2021-05-18
            • 2017-05-12
            • 2013-12-10
            • 1970-01-01
            • 2012-11-26
            • 1970-01-01
            • 2023-03-22
            • 1970-01-01
            相关资源
            最近更新 更多