我有一个Web应用程序,可以接受最多4 MB的文件上传。服务器端脚本是PHP,Web服务器是NGINX。许多用户要求大幅增加此限制以允许上传视频等。
然而,PHP的这个问题似乎没有简单的解决方案。首先,在客户端,我正在寻找允许我在传输过程中块文件的东西。 SWFUpload似乎没有这样做。我想我可以使用Java FX(http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file)流上传,但我在PHP中找不到任何等效的request.getInputStream。
增加浏览器client_post限制或php.ini上传或max_execution
次并不是真正大文件(~1GB)的真正解决方案,因为浏览器可能会超时并想到存储在内存中的所有blob。 / p>
有没有办法在服务器端使用PHP解决这个问题?我很感激您的回复。
答案 0 :(得分:11)
plupload是一个javascript / php库,它非常易于使用并允许分块。
它使用HTML5。
答案 1 :(得分:3)
“但我在PHP中找不到任何等效的request.getInputStream。”
或许 fopen('php://input');
?
答案 2 :(得分:3)
答案 3 :(得分:2)
尝试使用bigupload
脚本。它非常易于集成,并且可以上传最多2 Gb的块。块大小可自定义。
答案 4 :(得分:1)
查看tus protocol这是一个基于HTTP协议的可恢复文件上传,这样您就可以继续停下的地方,而不会在发生任何中断时重新上传整个数据。该协议自2017年5月起一直adopted by vimeo。
您可以使用不同语言here找到协议的各种实现。在您的情况下,您可以使用名为uppy的javascript客户端,并在服务器中使用基于golang或php的服务器实现。
答案 5 :(得分:0)
如何使用java applet进行上传和PHP处理..
您可以在此处找到Jupload的示例: http://sourceforge.net/apps/mediawiki/jupload/index.php?title=PHP_Example
答案 6 :(得分:0)
您可以使用this package
它支持断点续传。
在 examples / js-examples / resumable-chunk-upload 示例中,您可以关闭并重新打开浏览器,然后恢复未完成的上传。
答案 7 :(得分:-2)
您绝对可以编写一个接受数据块的Web应用程序(甚至通过POST),然后将该数据块附加到文件中。在我看来,你需要某种客户端应用程序,它将获取文件并将其分解为块,然后一次将其发送到您的Web服务一个块。但是,创建一个sftp目录似乎要容易得多,并且让客户端使用一些预先存在的客户端应用程序来获取文件。