【发布时间】:2015-10-02 23:56:08
【问题描述】:
我整天都遇到这个问题,我很困惑为什么会这样。
我在 React JS 组件中从客户端发布一个文件(一个 .xls 文件),以响应点击这样的按钮:
upload: function (e) {
e.preventDefault();
var model = this.state.model;
var xlsFile = this.refs.xlsFile.getDOMNode();
var file = xlsFile.files[0];
var fd = new FormData();
fd.append('file', file);
var request = {
groupId: this.state.vkNumber,
payload: fd
};
model.importRequest = request;
model.setImportProcessing();
MultiOrderActions.updateUsers(request);
this.setState(model.toState());
}
Chrome 中显示的请求(POST 请求):
接受:/ 接受编码:gzip,放气 接受语言:en-US,en;q=0.8,da;q=0.6 连接:保持活动 内容长度:3799243 内容类型:multipart/form-data;边界=----WebKitFormBoundaryBVYYdSXRza1yRuW4
以及请求的负载:
------WebKitFormBoundaryBVYYdSXRza1yRuW4 内容处置:表单数据;名称=“文件”;文件名="bruger_caas.xls" 内容类型:application/vnd.ms-excel
------WebKitFormBoundaryBVYYdSXRza1yRuW4--
请求中不应该有任何二进制数据吗?内容长度正确,内容类型和文件名也正确。
在 WebAPI 中,我正在执行以下操作,其中 ReadAsMultiPartAsync 永远不会返回:
[HttpPost]
[Route("bc/s/{*url}")]
public async Task<IHttpActionResult> Post(string url)
{
var service = CreateClient<GenericService>();
if (Request.Content.IsMimeMultipartContent())
{
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var content in provider.Contents)
{
//Do stuff
;
}
}
catch (Exception e)
{
;
}
}
return InternalServerError();
}
当它到达 await 关键字时,它就死了,并在 2 分钟后超时,因为 Chrome 取消了请求。
我在这里做错了什么?我真的不确定问题是文件从未真正从客户端发送,还是我的服务器端代码有问题。
任何意见将不胜感激。
【问题讨论】:
-
已经去过了,恐怕:/ 并没有真正有所作为..
-
刚刚尝试创建一个新方法,除了里面的 sn-p 什么都没有,这是同样的问题.. 永远不会从 ReadAsMultiPartAsync 返回 :( 感谢您的输入
标签: c# asp.net file-upload asp.net-web-api