Да ... Я знаю, что тема может показаться двуличной, но я использовал несколько альтернатив, найденных в stackoverflow, но практически все попытки потерпели неудачу.
Сценарий
- Laravel Framework 5.7.11 (в настоящее время я не могу выполнить обновление до версии 5.8).
- league / flysystem v1.0.51 (последнее обновление).
Требование
- Дважды щелкните по строке 'Datatables' и загрузите файл PDF.
Маршрутизатор
Route::get('/download/{id?}', 'Mensagem\DocumentoController@download')->name('Documento.download');
Контроллер
public function download()
{
return response()->download(storage_path('app/' . 'storage_app_file.pdf'));
}
jQuery / Ajax
/* DOUBLE CLICK ROW */
$datatable.find("tbody").on("dblclick", "tr", function() {
let data = table.row(this).data();
$.ajax({
url: '{{route("Documento.download")}}',
type: "get",
contentType: false,
processData: false,
cache: false,
beforeSend: function() {
console.log("double click beforeSend...");
},
success: function() {
console.log("DOUBLE CLICK ROW: success...");
}
});
});
Результат (в результате отсутствует файл загрузки и «содержимое binany»)) 

* Обновлено 209-04-04 15: 23
Возможное решение ...
По какой-то причине просто с помощью ...
{{--window.open = '{{route("Documento.download")}}';--}}
... даже изменив имя файла в контроллере, всегда загружая один и тот же файл раньше...
Я решил сделать ответ Macro:
\Response::macro('attachment', function ($content) {
$rand = mt_rand(11111, 99999);
$filename = 'download-' . "{$rand}" . '.pdf';
$headers = [
'Content-type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . $filename .
'"',
'Content-Transfer-Encoding' => 'Binary"',
];
return \Response::make($content, 200, $headers);
});
... и в контроллере:
$file = \Storage::disk('local')->get( $name );
return response()->attachment( $file );
... в режиме двойного щелчка ...
let myWindow = window.open('{{route("Documento.download")}}', '_blank', 'location=yes,height=400,width=300,scrollbars=yes,status=yes');
setTimeout(() => myWindow.close(), 3000);