我们意识到,如果要生成包含15GB视频文件的多部分查询,则不可能在内存中分配如此大量数据所需的大小,大多数设备只有2GB或3GB RAM。
因此,绝对有必要切换到uploadTask方法,该方法会将将发送到服务器的IP数据包允许的最大大小的块文件的内容推送到服务器。
这是一个POST方法。但是,它不包含文件夹ID或文件名之类的参数。因此,您需要一种传输这些参数的方法。最好的方法是在URL中进行编码。
我提出了一种在API端点后面的路径形式的编码格式,但是我们也可以通过URL中的经典方式很好地对这两个参数进行编码,例如:
/api/upload?id=123&filename=video.mp4
根据我在Stackoverflow上阅读的内容,使用Symfony检索ID和文件名很简单。然后,可以将原始请求中接收到的所有数据直接以原始方式直接写入文件,而无需通过服务器端内存中的缓冲区。
必须强制传输用户数据,无论是移动端还是服务器端,以及上传还是下载。就安全性而言,将用户内容加载到内存中也是非常危险的。
在symfony中,我该怎么做?
答案 0 :(得分:0)
这超出了Symfony的范围,并取决于您使用的Web服务器。
默认情况下,使用apache / nginx和php时,您将收到一个已经缓冲的请求,因此无法将其流式传输到文件中。
但是,有一些解决方案,例如使用Apache可以流式传输请求,请参见http://hc.apache.org/httpclient-3.x/performance.html#Request_Response_entity_streaming
也许nginx也有它的选项,但我不知道这些。
另一个选项可能是websocket,请参见http://en.wikipedia.org/wiki/WebSocket