我正在尝试在我的laravel 4项目中的表格上工作。客户端位迄今为止的工作原理,上传在2MB块中构成块,并且正在从浏览器发送数据。甚至有一个方便的进度栏以显示上传进度。
问题在PHP侧,因为我无法将上传流的内容写入磁盘。系统始终以创建0个字节文件结束。这个想法是将块附加到已经上传的文件到达时。
该项目建立在Laravel 4上,因此我不确定Laravel是否读取 php://input 流并对其做些事情。由于 php://Input 只能读取一次,因此可能意味着,到我的控制器实际上试图读取流时,它将是空的。
控制器看起来如下:
public function upload()
{
$filename = Config::get('tms.upload_path') . Input::file('file')->getClientOriginalName();
file_put_contents($filename, fopen('php://input', 'r'), FILE_APPEND);
}
文件正在创建,但长度始终保持在0字节。有什么想法我如何哄骗 php://Input 流的内容?
afaik fopen返回文件的指针,而不是流的指针,因此它可能不好作为file_put_contents的参数
您可以尝试使用此解决方法,而不是您的file_put_contents?
$putdata = fopen("php://input", "r");
$fp = fopen($filename, "a");
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
fclose($fp);
fclose($putdata);
答案很简单,我需要关闭Multipart/form-data并使用 file_get_contents("php://input")
读取内容,然后将结果传递给file_put_contents()
So:
file_put_contents($filename, file_get_contents("php://input"), FILE_APPEND);
这有效并解决了我的问题。