如何通过AJAX上传文件而无需超时



我正在使用ajax上传〜50个文件的组,all< = 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的超时参数设置为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);
        });
    }

有了更快的连接,我似乎不会遇到这个问题。如果我使用浏览器的开发人员工具来促进速度,这将发生,这就是我为复制用户的情况而做的。

我在某个地方错过了设置吗?我如何保持上传?

使用mod_reqtimeout apache模块最终解决了我的问题:

RequestReadTimeout header = 20-40, MinRate = 500 body = 20, MinRate = 500

我在一个类似问题的底部找到了这个建议。

供参考,我尝试使用各种INI设置,Apache Timeout指令以及SET_TIME_LIMIT PHP函数,没有成功。

首先,您的Web服务器可以具有其他超时配置,也可能中断PHP执行。

Apache具有超时指令,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 = 300M
post_max_size = 300M

3-将其放在您的脚本中:

set_time_limit(3600); // 1 hour

由于上传在快速连接上工作正常,所以我想问题是暂停

您的配置似乎正确。只缺少一件事,set_time_limit

set_time_limit(0); //If set to zero, no time limit is imposed. 

相关内容

  • 没有找到相关文章

最新更新