Php 下载CSV文件的流响应
我正在尝试从服务器流式传输一个大型CSV。我加载一个JSON文件,将其转换为数组,然后将其作为CSV进行处理。在前端,我通过点击按钮调用以下命令Php 下载CSV文件的流响应,php,laravel,csv,laravel-5,Php,Laravel,Csv,Laravel 5,我正在尝试从服务器流式传输一个大型CSV。我加载一个JSON文件,将其转换为数组,然后将其作为CSV进行处理。在前端,我通过点击按钮调用以下命令 downloadCSVData() { axios({ url: '/downloadCSVData', method: 'GET' }).then((response) => { console.log(response) }); } 然后这个函数执行以下操作 publi
downloadCSVData() {
axios({
url: '/downloadCSVData',
method: 'GET'
}).then((response) => {
console.log(response)
});
}
然后这个函数执行以下操作
public function downloadCSVData()
{
//load JSON file
$data = file_get_contents($file_path, true);
//Convert file to array
$array = json_decode($data, true);
$headers = [
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0'
, 'Content-type' => 'text/csv'
, 'Content-Disposition' => 'attachment; filename=galleries.csv'
, 'Expires' => '0'
, 'Pragma' => 'public'
];
$response = new StreamedResponse(function() use($array){
// Open output stream
$handle = fopen('php://output', 'w');
// Add CSV headers
fputcsv($handle, array_keys($array['element'][0]), ',');
foreach ($array['element'] as $key => $row) {
fputcsv($handle, $row);
}
// Close the output stream
fclose($handle);
}, 200, $headers);
return $response->send();
}
现在,在控制台的前端,我可以看到响应以需要的方式打印出来。然而,据我的理解,后端应该触发文件被下载,而这并没有发生
我是否遗漏了一些东西,如何将其作为物理文件下载到前端
谢谢如果您直接访问URL,您的PHP设置应该可以强制下载。但是您已经处于一个完全加载的HTML页面中,因此需要使用这个技巧来下载文件。这将允许浏览器接收传入数据,就像您打开了新的浏览器窗口一样 尝试将下载功能更改为: 下载CSVDATA{ $ .attr'src','/downloadCSVData' 隐藏 .附于“身体”之后; }