我正在尝试在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://输入流的内容哄骗出系统吗?
答案 0 :(得分:1)
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);
答案 1 :(得分:0)
答案很简单,我需要关闭multipart / form-data并使用file_get_contents("php://input")
来读取内容并将结果传递给file_put_contents()
,如下所示:
file_put_contents($filename, file_get_contents("php://input"), FILE_APPEND);
这可以解决我的问题。