这是我的控制器和方法的路线:
Route::get('/designs/{catagories}', 'DesignController@catagories')->name('design.items');
我正在通过点击按钮使用javascript调用该路由:
Route::post('exportarDireccionTodos','MyController@exportarDireccionTodos');
$.ajax({
url: baseUrl+'exportarDireccionTodos',
type: 'POST',
data: {'id': optionsChecked},
success: function(response) {
//etc
包含以下代码:
MyController
我向模型发送了一些$delimiter=";";
$array = MyModel::findMany($todos)->toArray();
$filename = "direcciones.csv";
header("Content-Transfer-Encoding: UTF-8");
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'";');
$f = fopen('php://output', 'wb');
foreach ($array as $line) {
fputcsv($f, $line, $delimiter);
}
fclose($f)
return response()->json([
'status' => 'success',
'mensaje' => 'Direcciones exportadas a CSV'
]);
,然后创建了一个csv文件,但是我无法下载它,只是看到它在开发人员工具XHR中制作得很好,就像这样:< / p>
我尝试过:
id
并带有:
header('Content-Type: application/force-download');
header('Content-Type: text/csv');
与:
return Response::download($f, $filename, $headers); <-- here I got an error, Laravel 5.1 doesnt reconigze Response
总是发生相同的情况,csv已制作但无法下载。我尝试了另外两种创建csv的方法,但是它总是生成良好的,但是无法下载
答案 0 :(得分:1)
您在上次通话中缺少标题
return response()->download($f, $filename, $headers);
我在laravel应用中使用这些标题下载文件
$headers = [
'Content-Type' => 'application/csv',
"Content-Description" => "File Transfer",
"Cache-Control" => "public",
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
];
您可能比较幸运,可以暂时存储文件并生成要下载的URL
$fs = Storage::disk('local')->temporaryUrl($path, now()->addMinutes(5));
答案 1 :(得分:0)
嗯,问题是我的逻辑。我无法通过ajax调用下载文件。 我尝试过使用Laravel-Excel,但存在同样的问题。
此线程解决了我的问题:
https://github.com/Maatwebsite/Laravel-Excel/issues/848
$response = array(
'name' => "das",
'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,".base64_encode($archivo) //mime type of used format
);
并在ajax中:
var a = document.createElement("a");
a.href = response.file;
a.download = response.name;
document.body.appendChild(a);
a.click();
a.remove();