MIME 多部分流意外结束。 MIME 多部分消息不完整。 Web API 和超级代理
Unexpected end of MIME multipart stream. MIME multipart message is not complete. Web API and superagent
我在将文件从客户端上传到 Web 时遇到问题 api。当我尝试读取多部分内容时,我在控制器中收到此错误 "Unexpected end of MIME multipart stream. MIME multipart message is not complete."。我正在使用 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);
}
}
我认为这里的问题是由以下原因引起的:
headers: {
"Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
"Content-Disposition": "form-data; name=Foo",
}
我有一个类似的问题,通过删除 header 参数解决了,我猜 superagent 会自动添加它们。
我通过这样做解决了这个问题:
headers: {
"Content-Disposition": "form-data; name=Foo",
"enctype": "multipart/form-data"
}
我通过删除 headers 手动设置的 post 方法解决了这个问题。 Angular 6 + .NET 网络 Api
我因为一个愚蠢的错误而收到此错误:我的浏览器 agent/client(我使用的是 Postman),实际上没有选择文件
如果您使用的是 Postman,请同时检查您的 headers 是否合适(如该问题的其他答案和 other questions 所示):
Content-type
field has been set as multipart/form-data
我收到此错误是因为我在发布之前禁用了文件输入。如果 FILE INPUT 被禁用或者如果它没有名称属性,文件将不会被上传并且您将收到“MIME 多部分流的意外结束。MIME 多部分消息不完整”错误信息。
不要这样做:
<input type="file" disabled="disabled" id="myFile" />
这样做:
<input type="file" id="myFile" name="myFile" />
我在将文件从客户端上传到 Web 时遇到问题 api。当我尝试读取多部分内容时,我在控制器中收到此错误 "Unexpected end of MIME multipart stream. MIME multipart message is not complete."。我正在使用 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);
}
}
我认为这里的问题是由以下原因引起的:
headers: {
"Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
"Content-Disposition": "form-data; name=Foo",
}
我有一个类似的问题,通过删除 header 参数解决了,我猜 superagent 会自动添加它们。
我通过这样做解决了这个问题:
headers: {
"Content-Disposition": "form-data; name=Foo",
"enctype": "multipart/form-data"
}
我通过删除 headers 手动设置的 post 方法解决了这个问题。 Angular 6 + .NET 网络 Api
我因为一个愚蠢的错误而收到此错误:我的浏览器 agent/client(我使用的是 Postman),实际上没有选择文件
如果您使用的是 Postman,请同时检查您的 headers 是否合适(如该问题的其他答案和 other questions 所示):
Content-type
field has been set asmultipart/form-data
我收到此错误是因为我在发布之前禁用了文件输入。如果 FILE INPUT 被禁用或者如果它没有名称属性,文件将不会被上传并且您将收到“MIME 多部分流的意外结束。MIME 多部分消息不完整”错误信息。
不要这样做:
<input type="file" disabled="disabled" id="myFile" />
这样做:
<input type="file" id="myFile" name="myFile" />