ASP.NET的Web API,从柔性的FileReference上传时MIME多部分流意外结束(A

2019-07-04 17:44发布

继ASP.NET中发现的教程,实现做异步上传文件看起来像这样一个Web API控制器的方法:

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)
            {
                Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
            }

            return Request.CreateResponse(HttpStatusCode.OK);
        });

    return task;
}

通过标准的多部分HTML表单上传文件完美的作品。 然而,当其他开发者试图通过上传通过Flex的FileReference类构建多形式的文件,则会引发错误:

MIME多流意外结束。 MIME多信息是不完整的。

我不知道,如果问题出在网页API或Flex。 我发现某种相关的修补程序没有任何影响(的使用ASP.Net的Web API多重表单POST ),以及最近的这一个( “MIME多流。MIME多消息未完成”上的WebAPI上传错误 )。 如果第二个环节也是如此,没有人知道它是否通过的NuGet是出网页API的当前版本可用? 讨论是在五月份,从的NuGet最新的版本是八月,所以我想这个修复已完成部署,而不是我的问题的根本原因。

Answer 1:

通过现有的研究性阅读,并通过与CodePlex上的问题按照报道,它看起来像其他人证实了这一问题在九月仍然存在。

他们认为,MVC 4无法解析上传没有终止“\ r \ n”。

这个问题是非常简单的,但是非常难解决。 问题是,不Uploadify>未添加为“\ r \ n”个在MultiPartForm消息的结束

http://aspnetwebstack.codeplex.com/discussions/354215

到Flex的上传添加了“\ r \ n”这可能是值得一试



Answer 2:

我曾与柔性同样的问题。 以下是解决它的代码。 基本上,我使用自定义流追加该asp.net网页API期待的换行符。

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

        // Read the form data and return an async task.
         await streamContent.ReadAsMultipartAsync(provider);

希望这可以帮助。



Answer 3:

我曾与MVC4同样的问题,但会是正确的,名称添加到您的输入.....

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

和所有的魔法是备份和工作!



Answer 4:

对于这里登陆谷歌搜索:

MIME多流意外结束。 MIME多信息是不完整的。

读请求流不止一次也会出现这种异常。 我与它挣扎了几个小时,直到我发现了一个源解释说,请求流只能读一次。

就我而言,我结合试图读取使用请求流MultipartMemoryStreamProvider ,并在同一时间让ASP.NET通过我的API方法指定参数(请求主体推出)做一些魔术对我来说。



Answer 5:

确保在图像文件首先上传的物理实存的虚拟目录(“〜/ App_Data文件”目录下面的例子)。 当您发布的项目,它可能不会在输出文件。

string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);


Answer 6:

我只是删除我的头,我在我的岗位方法,最终解决这一问题设定。



文章来源: ASP.NET Web API, unexpected end of MIME multi-part stream when uploading from Flex FileReference