在PHP中使用分块上传1GB文件

在PHP中使用分块上传1GB文件,php,upload,large-files,Php,Upload,Large Files,我有一个web应用程序,可以接受高达4MB的文件上传。服务器端脚本是PHP,web服务器是NGINX。许多用户要求大幅提高这一限制,以允许上传视频等 然而,用PHP解决这个问题似乎并不容易。首先,在客户端,我正在寻找允许我在传输过程中分块文件的东西。SWFUpload似乎没有这样做。我想我可以使用JavaFX()流式上传,但在PHP中找不到与request.getInputStream等价的东西 对于非常大的文件(~1GB),增加浏览器客户端的post限制或php.ini上载或max\u执行次数

我有一个web应用程序,可以接受高达4MB的文件上传。服务器端脚本是PHP,web服务器是NGINX。许多用户要求大幅提高这一限制,以允许上传视频等

然而,用PHP解决这个问题似乎并不容易。首先,在客户端,我正在寻找允许我在传输过程中分块文件的东西。SWFUpload似乎没有这样做。我想我可以使用JavaFX()流式上传,但在PHP中找不到与request.getInputStream等价的东西

对于非常大的文件(~1GB),增加浏览器客户端的post限制或php.ini上载或
max\u执行次数并不是一个真正的解决方案,因为浏览器可能会超时并想到存储在内存中的所有BLOB


有没有办法在服务器端使用PHP解决这个问题?非常感谢您的回复。

您完全可以编写一个web应用程序,接受一块数据(甚至通过POST),然后将该数据块附加到文件中。在我看来,您需要某种客户端应用程序,它将接收一个文件并将其分块,然后一次一块地将其发送到您的web服务。然而,创建一个sftp目录,让客户机使用一些预先存在的客户机应用程序来生成文件似乎要容易得多

“但我在PHP中找不到与request.getInputStream等效的文件。”


fopen('php://input');可能吗?

使用java小程序进行上传,使用PHP进行处理怎么样

您可以在此处找到Jupload的示例:

我创建了一个JavaFX客户端来发送最大post大小的大块文件(我使用2MB)和一个PHP接收器脚本来将大块文件组装成原始文件。我在这里发布apache许可下的代码: 您可以随意使用/修改/分发。

是一个javascript/php库,它非常易于使用并允许分块

不过它使用HTML5。

尝试使用该脚本。它很容易集成,可以分块上传高达2GB的数据。区块大小是可自定义的

看看哪一种是基于HTTP的可恢复文件上传协议,这样您就可以在中断的情况下继续进行,而无需重新上传整个数据。本协议也于2017年5月生效

您可以在不同的语言中找到该协议的各种实现。在您的情况下,您可以使用其名为或的javascript客户端,并在服务器中使用基于或的服务器实现。

您可以使用

它支持可恢复的区块上传


examples/js examples/resubable chunk upload示例中,您可以关闭并重新打开浏览器,然后继续未完成的上载。

我的一个应用程序通过配置您提到的相同服务器端选项,允许上载>1 GB的文件。用户从未报告过超时或类似情况。IMHO,一个好的解决方案在任何地方都有效。上载1GB文件在56 KBPS调制解调器/慢速连接上不起作用。分块解决方案将非常强大,可以支持恢复中断的链接。请看这里:感谢链接。这应该是可能的,我现在正在尝试使用JavaFX。JUpload的屏幕截图可以追溯到10年前;o) 哈哈,我不太确定,男:)但是PHP代码是最近的。。(几天前的上次更新)您可以看到他们是如何进行分块的。。不php://input 对于多部分表单数据,如果这就是解决问题的方法,那么不要犹豫,将其标记为答案;-)您可能不希望在每个块进入时将其附加到目标文件中。这是有可能的块得到的秩序。我们使用的解决方案是用一个数字id保存每个区块,然后在所有区块上传后合并所有区块。值得一提的是,同时它还支持HTML4、Silverlight和Flash,如图所示。这里的链接是deadcheck。找不到示例并允许设置请求头吗?是的,您可以使用tus中间件添加请求头:您可以在此处找到示例实现: