4

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

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

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

问候

4

5 回答 5

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。

于 2012-10-29T13:12:29.690 回答
1

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

于 2012-10-29T13:09:23.503 回答
1

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

于 2012-10-29T13:09:37.083 回答
1

问题是,它不是很实用。首先你有一个问题,当你遇到浏览器问题时,你必须重新开始上传。当您上传大文件时,可能会发生这种情况。

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

php 上传大文件
AX-JQuery Uploader

于 2012-10-29T13:11:04.123 回答
1

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

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

为什么你认为 PHP、apache 中存在这些限制……?因为是一种攻击方式,一个安全问题和一种阻止服务器的方式,可以很容易地被......每个人利用。

于 2012-10-29T13:15:04.573 回答