疑难杂症,CSV 文件下载失败问题。
前两天还好好的,今天就不能下载了。
没有报错。正常走程序,就是csv无法下载下来。
dd出来的数据如下。
blade如下
<form action="{{route('manage.download')}}" method="POST" enctype="multipart/form-data">
<button type="submit" class="btn btn-primary" style="margin-top:20px;">下载</button>
</form>
通用下载类如下
class csv{
public function download($list, $header, $filename, $quot=true)
{
if (count($header) > 0) {
array_unshift($list, $header);
}
$stream = fopen('php://temp', 'r+b');
foreach ($list as $row) {
$this->_fputcsv($stream, $row,$quot);
}
rewind($stream);
//$csv = str_replace("\n", "\r\n", stream_get_contents($stream));
$csv = stream_get_contents($stream);
$headers = array(
'Content-Type' => 'text/csv',
'Content-Disposition' => "attachment; filename=$filename",
);
return \Response::make($csv, 200, $headers);
}
private function _fputcsv($fp, $fields, $quot) {
$tmp = array();
foreach ($fields as $value) {
if($quot){
$value = str_replace('"', '""', $value);
$tmp[]= '"'.$value.'"';
}
else{
$tmp[]= $value;
}
}
$str = implode(',', $tmp);
$str .= "\r\n";
fputs($fp, $str);
}
}
调用方法如下。
public function csvdownload()
{
//原始数据
$data = [
0 => [
'id' => '1',
'name' => 'test1',
],
1 =>[
'id' => '2',
'name' => 'test2',
],
....
];
//CSV header
$header = ['id', 'name'];
//文件名
$filename = Carbon::now()->format('YmdHis') . ".csv";
//调用类,下载。
CSV::download($data, $header, $filename, true);
}
推荐文章: