上传非常大的文件(> 5GB)

时间:2012-10-29 13:02:34

标签: php jquery upload blob filereader

我需要你的帮助。我想用HTML,JQuery和PHP创建一个上传脚本。 是否可以编写一个脚本,可以上传非常大的文件(> 5 GB)?

我已经尝试使用FileReader,FormData和Blob,但即使使用这些,我也无法上传大文件(选择大文件后我的浏览器崩溃了)。

PS:我想自己写。不要发布任何已完成的脚本。

此致

5 个答案:

答案 0 :(得分:4)

是。我写PHP来上传文件比一年前多5GB。

FileReader,FormData和Blob将失败,因为它们都需要预处理并在上传之前使用javascript进行转换。

但是,您可以使用简单的XMLHttpRequest轻松上传大文件。

var xhr=new XMLHttpRequest();
xhr.send(document.forms[0]['fileinput']);

这不是标准或文档化的方式,但很少有Chrome和Firefox支持。但是,它按原样发送文件内容,而不是multipart / form-data,而不是http form-data。 您需要准备自己的http标头以提供其他信息。

var xhr=new XMLHttpRequest(), fileInput=document.forms[0]['fileinput'];
xhr.setRequestHeader("X-File-Name", encodeURIComponent(getInputFileName(fileInput)));
xhr.setRequestHeader("X-File-Size", getFileSize(fileInput));
xhr.send(fileInput);

PS。好吧,实际上它不是PHP。它混合了PHP和Java Servlet。

答案 1 :(得分:1)

查看“分块”,可能使用AX Ajax multi uploader这样的插件,这应该有助于客户端和服务器端文件大小限制。

答案 2 :(得分:1)

请注意,调整 PHP.ini 变量(与脚本计时相关)非常重要,称为每个脚本的最长执行时间,以秒为单位max_execution_time = xxxx防止你的脚本超时,因为你知道上传大文件很费时间。还检查变量max_input_time = xxxx,这是每个脚本可能花费在解析请求数据上的最长时间。最好将这段时间限制在制作服务器上,以便消除意外长时间运行的脚本,但在您的情况下,您可能需要增加它。 还要考虑更改以下变量memory_limitupload_max_filesizepost_max_size

答案 3 :(得分:1)

问题是,它不太实际。首先,您遇到问题,当您遇到浏览器问题时,必须重新启动上传。当你上传一个大文件时就会发生这种情况。

这是Ajax的另一个解决方案:

php uploading large files
AX-JQuery Uploader

答案 4 :(得分:1)

我不认为网络上传被认为是5gb +类型的文件,或浏览器将愉快地传输这种信息。文件系统限制也是一个问题。您应该根据使用场景考虑/重新考虑文件上载。是网络唯一的选择吗? FTP,流媒体,远程转储可能是更好的解决方案,不会在进行传输时阻止您的网络服务器/网页。 HTTP不是最好的协议。

认为浏览器,PHP和Apache都拥有有限的内存。当Chrome使用每页超过250 MB时,我的防病毒软件会警告我(这被认为是正常的)。 PHP有一个默认的128 MB专用内存,想象有100个同时Apache用户上传5GB文件。这就是他们发明FTP的原因。

为什么你认为这些限制存在于PHP,apache ......?因为是一种攻击方式,一个安全问题和一种阻止服务器的方式,可以被......大家轻易利用。