简而言之,如果我发送一个带有大量(20-30mb)有效负载的HTTP POST,并且连接在将请求发送到服务器的过程中中断了,我可以恢复在连接断开之前发送的10mb +吗?
在我对NGINX上的PHP测试中,如果在上传过程中连接断开,我的PHP似乎永远不会启动。我在脚本的顶部有ignore_user_abort(1),但只有在收到完整的请求后,这似乎才有意义。
是否有某个配置设置允许我查看收到的所有请求,即使它没有完整收到?
我主要通过间歇性连接发送这些文件,因此我希望尽可能多地发送每个请求,然后只询问服务器从哪里继续。目前的情况是,我必须分段发送文件,如果有错误则减少部分的大小,或者如果一段时间没有任何错误则增加大小。这非常慢,浪费了带宽。
=======
我应该澄清一下,如果连接中断,我可以一次性上传一个大文件,我可以从我离开的地方接听吗?在我的所有测试中,如果没有收到完整的帖子,那么整个请求都会被废弃并且PHP没有得到通知,所以我必须从头开始。
我必须运行一些测试,但是你是说如果我对请求使用了chunked transfer encoding,那么PHP会在断开连接之前得到所有的块吗?这是值得一试的,当然更好的是在连接断开的情况下制作多个较小的帖子。
感谢您的建议。
答案 0 :(得分:1)
永远不要通过脚本后端(Ruby,PHP)处理大文件上传,有一个内置的直接上传功能,名为 client_body_in_file_only ,请参阅我对此的深入概述:https://coderwall.com/p/swgfvw/nginx-direct-file-upload-without-passing-them-through-backend
唯一的限制是它不适用于多部分表单数据,但只能通过AJAX或从移动设备或服务器到服务器的直接POST。