繁体   English   中英

在服务器上将文件上传到Web API超时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM