Сохраните и восстановите файл в Laravel - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблемы с пониманием сохранения и поиска файлов в 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-тег для загрузки файла, но не могу получить его для загрузки файла.

<a href="/storage/app/public/agreements/'. {{$filenameToStore}}" download="{{$filenameToStore}}">{{$filenameToStore}}</a>

Файл загружается, но я получаю сообщение об ошибке «Ошибка сервера».Я не хочу использовать одну и ту же ссылку, поскольку эти файлы являются конфиденциальными и их нельзя загружать за пределы приложения.

1 Ответ

0 голосов
/ 21 ноября 2018

Что-то подобное?

Шаг 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>

Или вы можете построить его на основе идентификатора файла.

...