Tenho um arquivo PDF hospedado no servidor onde ao clicar em um link no meu site é executada uma função javascript para baixar o PDF. Os browses atuais já tem o recurso para exibir o PDF em uma nova aba dentro do próprio browses, e por este motivo o arquivo PDF não baixa mais automaticamente, porém estava com uma demanda onde ao clicar no link seria necessário forçar o download do PDF paro o dispositivo do usuário e não exibir o mesmo no browser. Depois de muitas tentativas cheguei neste código que resolveu meu problema do dia.
No Front-end:
<a onclick="donwloadArquivo()" href="#">Baixar arquivo PDF</a>
<script>
donwloadArquivo () {
window.open('http://localhost:8000/api/forcar-download-arquivo', '_blank')
}
</script>
No Back-end:
<?php
public function forcarDownloadArquivo(){
// Caminho real do arquivo PDF
$filePath = public_path('download/Arquivo.pdf');
// Verifique se o arquivo realmente existe
if (file_exists($filePath)) {
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="downloaded_file.pdf"',
];
return response()->download($filePath, 'Novo_Nome_Arquivo.pdf', $headers);
} else {
// Caso o arquivo não exista, você pode retornar uma resposta de erro ou redirecionar, conforme necessário.
return response()->json(['error' => 'Arquivo não encontrado'], 404);
}
}
?>