如何通过Ajax上传文件而没有超时?

我正在使用ajax上传一组约50个文件,全部<= 5MB。如果连接速度较慢,则上载将“超时”,甚至没有完成第一个上载(大约需要45秒钟才能完成上载)。


在Firefox中,ajax将失败,并显示“错误”响应,但没有更多信息。在Chrome中,出现net :: ERR_CONNECTION_RESET错误。


我检查了我的Apache和php.ini设置,我相信它们已经足够。


post_max_size = 1000M

upload_max_filesize = 15M

max_input_time = -1

max_execution_time = 0

max_file_uploads = 50

memory_limit = 128M

我也尝试将ajax的timeout参数设置为0。我的ajax请求看起来像这样:


return $.ajax({ 

    url: ajaxpath,

    type: 'post',

    data: formData,

    dataType: 'json',

    timeout: 0,

    xhr: function(){


        var myXhr = $.ajaxSettings.xhr();


        if(myXhr.upload) myXhr.upload.addEventListener('progress',function(e){


            uploadProgress(e,item);


        },false);


        return myXhr;


    },

    processData: false,

    contentType: false


}).fail(function(jqXHR,textStatus,errorThrown){


            console.log(textStatus,errorThrown);


        });


    }

随着连接速度的加快,我似乎没有遇到这个问题。如果我使用浏览器的开发人员工具来限制速度,那将会发生,这就是我在复制用户情况的方式。


我在某处缺少设置吗?如何保持上传状态?


炎炎设计
浏览 231回答 3
3回答

有只小跳蛙

使用mod_reqtimeout&nbsp;Apache模块最终解决了我的问题:RequestReadTimeout&nbsp;header&nbsp;=&nbsp;20-40,&nbsp;MinRate&nbsp;=&nbsp;500&nbsp;body&nbsp;=&nbsp;20,&nbsp;MinRate&nbsp;=&nbsp;500我在类似问题的底部找到了这个建议。作为参考,我尝试增加各种ini设置,Apache TimeOut指令以及set_time_limit php函数,但均未成功。

精慕HU

首先,您的Web服务器可以具有其他超时配置,这些配置也可能会中断PHP执行。Apache具有Timeout指令,而IIS具有CGI超时功能。两者默认为300秒。有关特定的详细信息,请参见Web服务器文档。这条信息ERR_CONNECTION_RESET并非来自php脚本,这是服务器问题,因为服务器正在断开连接,不向客户端发送任何内容!您可以尝试以下方法:1-更改设置max_execution_time = 1000,看看是否有更多时间,使用max_execution_time = 0时,我对旧的xammp和appserv版本有一些问题!2-在php.ini中设置:upload_max_filesize&nbsp;=&nbsp;300M post_max_size&nbsp;=&nbsp;300M3-将其放在您的脚本中:set_time_limit(3600);&nbsp;//&nbsp;1&nbsp;hour由于在快速连接上上传效果很好,我想问题是某个地方超时了

德玛西亚99

您的配置似乎正确。只有一件事是set_time_limitset_time_limit(0);&nbsp;//If&nbsp;set&nbsp;to&nbsp;zero,&nbsp;no&nbsp;time&nbsp;limit&nbsp;is&nbsp;imposed.
打开App,查看更多内容
随时随地看视频慕课网APP