Из Axios я вызываю маршрут, который генерирует массив массивов, для создания CSV. Как я могу загрузить CSV-файл без необходимости предварительно сохранять его на сервере?
С помощью следующего кода я могу сгенерировать и загрузить его, исправить формат CSV, и он занимает около 14 КБ. Но я не могу открыть его ни в одной программе (excel, vscode,блокнот...), думаю, из-за проблем с кодировкой ¿?.
на сервере:
Код: Выделить всё
$full = array_merge($header,$lines);
$headers = array(
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=file.csv",
"Pragma" => "no-cache",
"Content-Encoding" => "UTF-8",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);
$callback = function() use($full) {
$file = fopen('php://output', 'w');
//fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); same result
fputcsv($file, $full);
fclose($file);
};
return response()->stream($callback, 200, $headers);
Код: Выделить всё
axios.post('{{ route("shiple.table") }}', filters)
.then(function (response) {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.csv');
document.body.appendChild(link);
link.click();
})
.catch(function (error) {
console.log(error);
});
Подробнее здесь: https://stackoverflow.com/questions/761 ... -laravel-9
Мобильная версия