У меня проблемы с пониманием сохранения и поиска файлов в Laravel. Мне удалось сохранить файл по правильному пути
$fileNameWithExt = $request->file('Agreement_file')->getClientOriginalName();
$fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
$extention =$request->file('Agreement_file')->getClientOriginalExtension();
$filenameToStore = $fileName . '_' . $lab_id. '.'.$extention;
$request->Agreement_file->storeAs('agreements', $filenameToStore );
Однако я не хочу создавать a-tag для загрузки файла, но не могу получить, чтобы загрузить файл.
<a href="/storage/app/public/agreements/'. {{$filenameToStore}}" download="{{$filenameToStore}}">{{$filenameToStore}}</a>
Файл загружается, но я получаю сообщение об ошибке «Ошибка сервера». Я не хочу использовать одну и ту же ссылку, поскольку эти файлы являются конфиденциальными и их нельзя загружать за пределы приложения.
Что-то вроде того?
Шаг 1:
Создать файлы таблицы id | filename | user_id
,
Шаг 2:
Создать файл модели
Шаг 3:
Добавить строку файла в таблицу.
$fileNameWithExt = $request->file('Agreement_file')->getClientOriginalName();
$fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
$extention =$request->file('Agreement_file')->getClientOriginalExtension();
$filenameToStore = $fileName . '_' . $lab_id. '.'.$extention;
$request->Agreement_file->storeAs('agreements', $filenameToStore );
File::create([
'filename' => $filenameToStore,
'user_id' => Auth::id()
]);
Шаг 4:
Создать способ загрузки контроллера.
public function download(){
$filename = $request->input('filename');
$file = File::where('user_id', Auth::id())
->where('filename', $filename)
->firstOrFail();
$path = Storage::path('agreements/' . $filename);
if(Storage::exists($path)){
return Response::download($path, $filename);
}
}
Шаг 5:
Замените вашу ссылку:
<a href="/path/download?filename='. {{$filenameToStore}}" download="{{$filenameToStore}}">{{$filenameToStore}}</a>
Или вы можете построить его на основе идентификатора файла.
Других решений пока нет …