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

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

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

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

问候

是。 我写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。

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

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

php上传大文件
AX-JQuery上传器

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

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

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

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

为什么你认为这些限制存在于PHP,apache ……? 因为是一种攻击方式,一种安全问题和一种阻止服务器的方式,这种方式很容易被……所有人利用。

Interesting Posts