ajax文件上传超时

Posted

技术标签:

【中文标题】ajax文件上传超时【英文标题】:Timeout when doing ajax file upload 【发布时间】:2016-05-05 04:49:03 【问题描述】:

我让用户选择要上传的单个文件。但是在非常奇怪的情况下,上传永远不会完成。

工作用例:页面完成加载后,用户选择一个文件并上传,它总是会上传。

不工作用例:页面加载完成后,用户盯着屏幕一两分钟,然后选择要上传的文件,上传几乎永远不会完成。我们不知道凝视多久就足够了,但通常 2 到 5 分钟就够了。该问题仅出现在 Windows 7 机器上的 IE 11 中。在同一台机器上,Chrome 和 Firefox 运行良好。 IIS Web 服务器不是负载平衡的,但它也发生在负载平衡的环境中。当上传永远不会完成时,期望 POST 的控制器永远不会收到请求,IIS 日志也永远不会收到 POST 请求。

更新: 我发现开发Web服务器是单台服务器,但实际上是在负载均衡环境后面,因为我们的QA环境有两台Web服务器并且负载均衡。话虽如此,看来问题是由负载平衡器引起的。因为如果文件通过节点名称 POST 到服务器 URL,则上传工作。但是如果 POST 到负载均衡器,它会失败。我会看看我的网络人员是否可以找到解决方案。我不认为这是代码问题,还是我错了?

var FormEdit = function () 
    var that = ;

    that.upload = function () 
        var data = new FormData();
        var fileInput = $('#fileInput')[0];
        var file = fileInput.files[0];
        data.append(file.name, file);

        $.ajax(
            type: 'post',
            dataType: 'json',
            url: url,
            data: data,
            processData: false,
            contentType: false,
        ).fail(function () 
        ).then(function (data) 
        ).always(function () 
        );
    ;
;

【问题讨论】:

如果服务器从未收到请求,则可能是您正在测试它的计算机的问题。你用 IE11 试试另一台电脑吗 是的,我在其他几台具有相同浏览器和操作系统的 PC 上进行了尝试,并且遇到了同样的问题。这是一个企业环境,所以大多数 PC 都是相似的。 介意分享脚本挂钩的触发器吗?还有你用来发送的文件有多大? 【参考方案1】:

我解决了问题,但认为这不是最好的方法。

就在我执行 HTTP POST 上传文件之前,我执行 HTTP GET,然后执行 HTTP POST。到目前为止,它一直是这样工作的。

我的网络人说 IE 11 的连接超时为 1 分钟。如果连接超时,您很不走运,只能再次创建新连接以上传文件。

【讨论】:

以上是关于ajax文件上传超时的主要内容,如果未能解决你的问题,请参考以下文章

ajax如何 实现 文件上传

FTP上传文件连接超时,本地无问题,服务器上面连接超时?

大文件上传超时处理

NSURLSession 上传任务超时

通过 API 上传文件时 Heroku 前端超时

大型文件上传期间的 Grails 连接超时