进入一个非常离奇的问题,我正在寻找方向。
上下文:在WordPress中上传大文件(最多100MB)。作为该过程的一部分,在服务器端运行也是一项长任务(使用分块通过其API将文件推送到DropBox),因此对于较大的文件,响应不可避免地会延迟。通过执行PHP的sleep()
函数,可以轻松地模拟这部分。
问题: Fineuploader达到100%,显示waitingForResponse
消息约15秒(此时服务器仍未完成处理),然后从头开始重新启动上传。在第二次尝试之后,它声称从服务器没有收到任何内容,并将上传列为失败。控制台调试消息:
[FineUploader] xhr - server response received for 0
XMLHttpRequest { readyState=4, timeout=0, withCredentials=false, more...}
[FineUploader] responseText =
服务器日志显示两个请求,服务器回应成功JSON两次;最后,服务器上有两个文件。
问题:我该怎么做才能解决这个问题?我可以定期向FineUploader返回一些内容以确保没有超时吗?
答案 0 :(得分:2)
Fine Uploader没有适当的超时机制。如果您看到超时,则浏览器本身会强制超时,或者浏览器和服务器之间存在超时的设备。
过去使用AWS(亚马逊网络服务)时遇到过这个问题。与您的情况类似,我必须在收到整个文件之后执行一些处理服务器端,然后再返回响应。当然,在此处理期间,没有发生TCP流量。事实证明,ELB(Elastic Load Balancer)的TCP空闲超时为1分钟。对大文件的处理超过了此值,导致ELB终止请求。
当您完成请求/上传时,您只能返回对Fine Uploader的响应。如果您真的想等到Fine Uploader的“成功”响应,直到您的服务器端处理完成,您将需要弄清楚什么是终止您的请求。您的选项可能会增加终止请求的设备上的超时时间,或者只是将处理委派给单独的线程服务器端,并在收到所有文件字节后立即返回成功响应顺序。