我有一个数组,我正在尝试将其下载为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的响应方法而且很多其他似乎也没有用,它的标题无法强制浏览器下载文件
RESPONSE标题看起来像这样
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
答案 0 :(得分:0)
你的第2个标题分为2行吗?它必须是一行,没有换行符。
<?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);
?>
修改强>
这段代码对我有用。我添加了一个标题以强制下载,但它可以在Chrome中使用或不使用额外的标头。你可以尝试在不同的浏览器中运行它吗?我的想法是有浏览器设置 阻止下载。
>>> import collections
>>> class Thing(collections.namedtuple('Thing', ['x', 'y'])):
pass
>>> def create_thing():
x = 42
y = 24
return Thing(**locals())
>>> create_thing()
Thing(x=42, y=24)