【问题标题】:Array to CSV file download in Laravel 5.1Laravel 5.1 中的数组到 CSV 文件下载
【发布时间】:2017-09-26 18:10:27
【问题描述】:

我有一个数组,我正在尝试将其下载为 csv 文件 我的数组看起来像这样

Array(
[0] => Array
    (
        [Date] => 2017-01-02
        [Name] => Asia consumer MC Alpha bmk - risk
        [Level] => .333000
    )

[1] => Array
    (
        [Date] => 2017-01-03
        [Name] => Asia consumer MC Alpha bmk - risk
        [Level] => .333000
    ))

我将数组转换为文件的代码是

public function DownloadFile($filetype,$Array_data,$content){

    $LevelArray = array('Date','Name','Level');

    $selected_array =  $LevelArray;
    if($filetype =='csv'){

            $Filename ='Level.csv';
            header('Content-Type: text/csv; charset=utf-8');                
            header('Content-Disposition: attachment; 
            filename='.$Filename.'');
            // create a file pointer connected to the output stream
            $output = fopen('php://output', 'w');
            fputcsv($output, $selected_array);
            foreach ($Array_data as $row){
                fputcsv($output, $row);
            }
            fclose($output);                
        }}

作为响应,我得到了响应的输出,但该响应并未转换为文件类型,尽管标题指向从中获取 csv 文件。

 Date,Name,Level
2017-01-02,"Asia consumer MC Alpha bmk - risk",.333000
2017-01-03,"Asia consumer MC Alpha bmk - risk",.333000
2017-01-04,"Asia consumer MC Alpha bmk - risk",.333000

我尝试过使用 laravel 和许多其他的响应方法,但似乎没有任何效果,它的标头无法强制浏览器下载文件

响应标题如下所示

Connection:close
Content-Disposition:attachment; filename=Benchmark-Level.csv
Content-type:text/csv;charset=UTF-8
Host:localhost:8000
X-Powered-By:PHP/5.6.25

【问题讨论】:

  • 您如何回复您的回复?
  • 我只是设置标题并将结果放到一个文件中,我打开同样的东西在 codeigniter 中工作但在这里不起作用

标签: php laravel csv response-headers downloadfile


【解决方案1】:

您的第二个标题是否分成 2 行?它必须是没有换行符的单行。

header('Content-Disposition: attachment; filename='.$Filename.'');

编辑

此代码对我有用。我添加了一个额外的标题来强制下载,但无论有没有这个额外的标题,它都可以在 Chrome 中使用。您能尝试在不同的浏览器中运行它吗?我的想法是有浏览器设置 阻止下载。

<?php

$selected_array = array('header:col1','header:col2', 'header:col3');

$Array_data = array(
    array('row1:col1','row1:col2', 'row1:col3'),
    array('row2:col1','row2:col2', 'row2:col3'),
    array('row3:col1','row3:col2', 'row3:col3'),
);

$Filename ='Level.csv';
header('Content-Type: text/csv; charset=utf-8');
Header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$Filename.'');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
fputcsv($output, $selected_array);
foreach ($Array_data as $row){
    fputcsv($output, $row);
}
fclose($output);
?>

【讨论】:

  • 只有一行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多