我正在使用Blueimp's jQuery Uploader(非常好,它太btw)和S3处理程序上传文件,然后通过S3 API(来自PHP SDK)将它们传输到S3。
有效。问题是,在大型文件(> 1GB)上,可以将几分钟的任何内容(通过create-object)传输到S3上。执行此操作的PHP文件将挂起,直到此过程完成。问题是,上传者(利用jQuery Ajax method)似乎放弃了等待并且每次都重新开始。
我原以为这与PHP INI'max_input_time'等有关,因为它似乎等了大约60秒,尽管现在看起来有所不同。我已经在PHP INI和其他相关的内容中增加了max_input_time - 但没有更进一步。
我还考虑过(更有可能)JS在脚本或jQuery方法中都有超时。开发人员(blueimp)说前端脚本中没有这样的超时,也没有看到任何,虽然在jQuery Ajax方法选项中引用了'timeout',但它似乎影响了它上传的整个时间而不是等待为了回应 - 所以没有多大用处。
感激不尽的任何帮助或指导。
答案 0 :(得分:1)
http://api.jquery.com/jQuery.ajax/的jQuery文档 说:
<强>超时强>
设置请求的超时(以毫秒为单位)。这将覆盖 使用$ .ajaxSetup()设置的任何全局超时。超时时间开始 在$ .ajax调用的点上;如果有其他几个请求 进度和浏览器没有可用的连接,这是可能的 请求在发送之前超时。在jQuery 1.4.x和 如下所示,XMLHttpRequest对象将处于无效状态 请求超时;访问任何对象成员可能会抛出一个 例外。仅在Firefox 3.0+中,脚本和JSONP请求不能 超时取消;即使脚本到达,脚本也会运行 超时期限。
除此之外,检查php set_time_limit函数和php max内存设置也可能是个好主意。
无论如何,在我看来,最好的方法是实现错误回调,如此
$.ajax('yourScript.php',{
error:function(jqXHR){ echo this error ... }
});
jQuery文档说:
错误回调按照它们注册的顺序被调用,如果是 请求失败。它们接收jqXHR,一个表示错误的字符串 type和一个异常对象(如果适用)。一些内置错误会 提供一个字符串作为异常对象:“abort”,“timeout”,“No 传输”。
这可能会提示您(谁是服务器或客户端)停止传输。
希望这有帮助
答案 1 :(得分:1)
一次上传大文件可能会导致各种问题。最好的做法是在客户端将文件拆分为块,然后将它们一次发送到服务器,一个块,然后让服务器将块重新组装到原始文件中,然后将其推送到S3。 / p>
只要您可以使用window.FileReader
和File.prototype.slice
,就可以在文件上使用javascripts .split()
进行剪切。