Скачать файл PDF из Laravel хранилища Voyager - PullRequest
0 голосов
/ 09 января 2020

У меня проблема с загрузкой файла PDF в laravel с помощью voyager. Кто-то сказал, я должен использовать 'json_decode', но я не могу понять, как это сделать. Вот мой контроллер:

Контроллер

class HomeController extends Controller
{
    public function index()
    {
        $posts = Post::all();
        $files = Download::all();

        return view('user.index', compact('posts', 'files'));
    }

    public function show($id)
    {
        $files = Download::where('id', $id)->firstOrFail();
        $path = storage_path($files->file);

        return response()->download($path);
    }
}

Маршрут

Route::get('/download/{id}','HomeController@show')->name(downloadFile);

Просмотр

@foreach($files as $file)
    <a class="primary-btn" href="{{route('downloadFile',$file->id)}}">Download Resume </a>
@endforeach

Файл "C: \ laragon \ www\kbtonmoy.com \ storage [{" download_link ":" downloads \ January2020 \ tmUxP8s9Tvzzqwnl7nxT.pdf "," original_name ":" ridita. pdf "}]" не существует

1 Ответ

0 голосов
/ 05 февраля 2020

Сначала проверьте ваш $ path Я думаю, вы не должны использовать функцию storage_path (). Потому что Voyager хранит информацию о файле в формате json. Я думаю, вы должны попробовать это.

Контроллер

class HomeController extends Controller
{
    public function index()
    {
        $posts = Post::all();
        $files = Download::all();

        return view('user.index', compact('posts', 'files'));
    }

    public function show($id)
    {
        $files = Download::where('id', $id)->firstOrFail();

        //$path = storage_path($files->file);

        $new_file = json_decode($files->file)[0];
        $new_file_path = Voyager::image($new_file->download_link);

        $new_file_name = $new_file->original_name; //if you need original file name
        $new_file_size = round((Storage::disk(config('voyager.storage.disk'))->size($new_file->download_link)) / (1024*1024) ,4) ; //if you need file size in MB

        return response($new_file_path);
    }
}

Просмотр

@foreach($files as $file)
    <a class="primary-btn" href="{{route('downloadFile',$file->id)}}" download>Download Resume </a>
@endforeach

Но я думаю, вы должны нормализуйте код, используя отношения в Скачать Модель

Так что вам не нужно маршрутизировать функцию show

Тогда это может выглядеть следующим образом

Контроллер

class HomeController extends Controller
{
    public function index()
    {
        $posts = Post::all();
        $files = Download::all();

        return view('user.index', compact('posts', 'files'));
    }
}

Просмотр

<?php 
foreach($files as $file){
    $new_file = json_decode($file->file)[0];
    $new_file_path = Voyager::image($new_file->download_link);

    $new_file_name = $new_file->original_name; //if you need original file name
    $new_file_size = round((Storage::disk(config('voyager.storage.disk'))->size($new_file->download_link)) / (1024*1024) ,4) ; //if you need file size in MB
?>
    <a class="primary-btn" href="{{$new_file_path}}" download>Download Resume </a>
<?php
}
?>

Надеюсь, это поможет вам.

...