在我的Laravel应用中,我正在使用流传输将大文件(> 1GB)下载到服务器上以进行进一步处理:
$stream = Storage::disk('google')->getDriver()->readStream($file['path']);
file_put_contents(public_path("files/{$filename}.tiff"), stream_get_contents($stream));
if (file_exists(public_path("files/{$filename}.tiff"))) {
ConvertTIFF::dispatch();
return;
}
问题在于,由于我正在流式传输文件,因此在流式传输过程实际完成之前很久就已经创建了文件本身。因此,我的file_exists()
检查会经常在文件完成之前触发我的ConvertTIFF
事件。
是否有更简单的方法来检查file_put_contents()
流传输过程是否完成?还是有一种方法可以阻止进程运行,从而在完全下载文件之前没有引发该事件的危险?
答案 0 :(得分:1)
file_put_contents()
返回写入文件的字节数,如果不成功,则返回False。这样您就可以检查状态
$status = file_put_contents(public_path("files/{$filename}.tiff"), stream_get_contents($stream));
/*if ($status) {
echo "success";
} else {
echo "failed";
}*/
return $status;