Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 下载CSV文件的流响应_Php_Laravel_Csv_Laravel 5 - Fatal编程技术网

Php 下载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

我正在尝试从服务器流式传输一个大型CSV。我加载一个JSON文件,将其转换为数组,然后将其作为CSV进行处理。在前端,我通过点击按钮调用以下命令

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' 隐藏 .附于“身体”之后; }