我正在开发一个包含小型 REST API 的应用程序。其中一种方法需要接受 PUT 请求上的大型(近 300MB)二进制文件上传。
由于该文件非常大,并且由于同时运行多个此类请求存在一定风险,因此我想避免将整个请求正文保存在内存中。我曾希望通过php://input
直接从流中读取并将其虹吸到文件中来做到这一点。
但是,控制器的input()
方法似乎有干扰。我理解其中的基本原理——input()
一旦你阅读了php://input
流,它就消失了,所以input()
保留它以重复访问。显然,这是我希望在这种情况下绕过的行为。
不过,在我的控制器代码运行之前,它似乎input()
在某处被调用,因为当我到达时php://input
,已经没有什么可读的了。
所以,我的问题是:CakePHP 控制器有没有办法将一个非常大的请求体流式传输到磁盘上,而无需先将整个请求体加载到内存中?