
[英]Web API controller for uploading a file on the server and save it in my sql server database
[英]Uploading file to Web API timeouts on the server
我整天都在遇到这个问题,而为什么会这样我却迷茫了。
我正在从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,缩小接受语言:zh-cn,en; q = 0.8,da; q = 0.6连接:keep-alive内容长度:3799243内容类型:multipart / form-data; boundary = ---- WebKitFormBoundaryBVYYdSXRza1yRuW4
以及请求的有效负载:
------ WebKitFormBoundaryBVYYdSXRza1yRuW4 Content-Disposition:表单数据; name =“文件”; filename =“ 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取消了该请求。
我在这里做错了什么? 我真的不确定问题是否是文件从未真正从客户端发送,还是问题出在我的服务器端代码。
任何输入将不胜感激。
对于那些谷歌搜索...我也正在解决文件上传超时问题。 就我而言,使用MultipartMemoryStreamProvider和ReadAsMultipartAsync时遇到死锁线程
最后,另一篇文章为我提供了一个解决方案:
Request.Content.ReadAsMultipartAsync永不返回
它使用“ TaskCreationOptions.LongRunning”来确保不同的线程并防止死锁。 该问题的评论有一个有用的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.