October 1, 2021

Laravel: Загрузка файла с проверкой прав доступа на файл

Если у нас какая-нибудь админка и надо дать возможность скачать файл с проверкой прав доступа на файл, то можно сделать так, как я тут описываю.

Если вы знаете способ лучше сделать тоже самое - пишите в комментарии, буду признателен.

Итак. Делаем маршрут для загрузки, в контроллере/обработчике сначала добавляем Illuminate\Http\Response в начало файла

use Illuminate\Http\Response;

И сама функция:

public function download($fileId)
{    
    /**
       Получаем контект файла (через Storage::get() или через file_get_contents)
       в переменную $fileContent, 
       имя файла, с которым он должен скачаться - $filename
    */
    return (new Response($fileContent, 200))
        ->header('Content-Disposition', 'attachment;filename="'. $filename . '"' );
}

Очевидный минус - при загрузке файла php жрет память (чтобы прочитать "в себя" файл целиком)