Приведённые примеры будут работать, но всё таки отдача файлов это не задача Laravel и PHP.
В laravel можно отдавать ещё так:
return response()->download(storage_path("name.doc"));
Намного эффективней будет отдавать, через nginx.
Для этого нужно отдавать файлы только через с специальный заголовок.
Например со статьи хабра:
Nginx умеет отправлять файлы из коробки через специальный заголовок.
Для корректной работы нужно запретить доступ к папку напрямую через конфигурационный файл:
location /protected/ {
internal;
root /some/path;
}
Пример отправки файла (файл должен находиться в директории /some/path/protected):
function file_force_download($file) {
if (file_exists($file)) {
header('X-Accel-Redirect: ' . $file);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
exit;
}
}
Больше информации на странице
официальной документации
Особенности:
- Скрипт завершается сразу после выполнения всех инструкций
- Физически файл отправляется модулем самого веб сервера, а не PHP
- Минимальное потребление памяти и ресурсов сервера
- Максимальное быстродействие