Я использую Laravel 4 Framework, у меня есть функция, которая создает CSV-файл с именем data_78888.csv, номер 78888 меняется каждый раз, когда функция запускается для создания CSV-файла. Эта функция возвращает строку, подобную этой: «Download / 78888»
Папка, в которой создаются мои csv-файлы, называется «выходные данные» и находится в папке моего проекта, в которой находится папка приложения (ее нет в общей папке).
То, что я хотел бы сделать, это создать маршрут, который указывает на мой контроллер процесса следующим образом:
Route::get('Download/{token}', array('uses' => 'ProcessController@downloadCSV'));
В моем контроллере я хотел бы отправить этот CSV-файл в браузер, чтобы загрузить его, я делаю так:
<?php
class ProcessController extends BaseController {
public function downloadCSV($token){
$fileToDownload = "data_".$token.".csv";
$filePath = "outputs/";
return Response::download($filePath, $fileToDownload, array(
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment;filename="'.$fileToDownload
));
}
}
Проблема в том, что это не работает, и я получаю HTML-файл с именем 78888.htm и ошибку на сервере.
Как я могу заставить это работать, пожалуйста?
Путь к файлу должен включать имя и расширение файла.
Так что попробуйте это;
$fileToDownload = "data_".$token.".csv";
$filePath = base_path() . "outputs/" . $fileToDownload;
return Response::download($filePath, $fileToDownload, array(
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment;filename="'.$fileToDownload
));
Также убедитесь, что файл существует, перед загрузкой.
Других решений пока нет …