Делаю отдачу документов средствами php, указываю Content-Type. А при клике на ссылку всегда определяется тип как text/html
и если открыть файл в браузере соответственно он получается кривым. Если сохранять, то все ОК. Почему явное указание content-type не работает?
public function getDocument($file)
{
// получаем всю инфу о файле:
$saveFile=FileMeeting::find($file);
// получаем путь к файлу:
$dir='meeting/'.$saveFile->meeting_id.'/'.$saveFile->filename;
// получаем его размер
$size = Storage::size($dir);
// получаем расширение
$ext = substr(strrchr($saveFile->filename, '.'), 1);
$mime = MimeType::detectByFileExtension($ext);
// приводим имя файла к божескому виду из титла
$nameToGet = preg_replace('/[^\p{L}0-9]/u', '', $saveFile->title);
// сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
// если этого не сделать файл будет читаться в память полностью!
if (ob_get_level()) {
ob_end_clean();
}
// заставляем браузер показать окно сохранения файла
header('Content-Description: File Transfer');
//header("Content-type: application/pdf");
header('Content-type: '.$mime);
header('Content-Disposition: attachment; filename=doc.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $size);
// читаем файл и отправляем его пользователю
return Storage::get($dir);
exit;
}
Решение и правда простое:
return response()->download($dir,$nameToGet);