laravel сохранить pdf нет такого файла или каталога

Итак, я хочу сохранить файл PDF в каталог на моем локальном сервере, но он продолжает говорить, что каталог не существует.

Итак, прежде всего, где бы вы хранили PDF-файлы, недоступные для внешних устройств (то есть не в общей папке).

Итак, это мой код. Загрузка работает идеально.

public function generatePDF()
    {
        $this->mailorder = Session::get('order');
        $this->cart = Session::get('cart');
        $data = [
                    'id' => $this->mailorder->id,
                    'client' => $this->mailorder->Contact,
                    'country' => $this->mailorder->country,
                    'city' => $this->mailorder->city,
                    'street' => $this->mailorder->street,
                    'postal' => $this->mailorder->postal,
                    'phone' => $this->mailorder->phone,
                    'email' => $this->mailorder->email,
                    'dateIn' => $this->mailorder->dateIn,
                    'dateOut' => $this->mailorder->dateOut,
                    'subtotal' => $this->mailorder->subtotal,
                    'tax' => $this->mailorder->tax,
                    'total' => $this->mailorder->total,
                    'cart' => $this->mailorder->cart,
                    'delivery' => $this->mailorder->delivery,
                ];
        $path = "order_{$this->mailorder->id}_{$this->mailorder->Contact}";       
        $pdf = PDF::loadView('pdf.orderConfirmationPdf', $data)->save('storage/app/public/'.$path.'.pdf');
        ;

        return $pdf->download(''.$path.'.pdf');
    }


person Giovanni Desramault    schedule 10.11.2018    source источник


Ответы (2)


Прежде всего, вы должны проверить, существует ли каталог с файловым фасадом. Если он не существует, вы должны создать каталог.

if(!File::exists($directory_path)) {
    File::makeDirectory($directory_path);
}

Если ошибка все еще возникает, вы должны заставить ее сделать каталог:

if(!File::exists($directory_path)) {

   File::makeDirectory($directory_path, $mode = 0755, true, true);    
}

После этого вы можете сохранить файл в этом каталоге.

Во-вторых, если вы не хотите сохранять файл в общедоступном каталоге. вы должны сохранить его в хранилище. Просто вызовите storage_path($file_path). таким образом laravel сохраняет файл в каталоге storage/app/public.

после этого вы можете получить URL-адрес файла в соответствии с этим ответ.

person Salar Bahador    schedule 10.11.2018
comment
@GiovanniDesramault Я рад, что помог вам - person Salar Bahador; 10.11.2018

Я разобрался, спасибо за ответ.

Это мой код:

public function generatePDF()
    {
        $this->mailorder = Session::get('order');
        $this->cart = Session::get('cart');
        $data = [
                    'id' => $this->mailorder->id,
                    'client' => $this->mailorder->Contact,
                    'country' => $this->mailorder->country,
                    'city' => $this->mailorder->city,
                    'street' => $this->mailorder->street,
                    'postal' => $this->mailorder->postal,
                    'phone' => $this->mailorder->phone,
                    'email' => $this->mailorder->email,
                    'dateIn' => $this->mailorder->dateIn,
                    'dateOut' => $this->mailorder->dateOut,
                    'subtotal' => $this->mailorder->subtotal,
                    'tax' => $this->mailorder->tax,
                    'total' => $this->mailorder->total,
                    'cart' => $this->mailorder->cart,
                    'delivery' => $this->mailorder->delivery,
                ];
        $filename = "order_{$this->mailorder->id}_{$this->mailorder->Contact}";
        $path = storage_path('pdf/orders');

        if(!File::exists($path)) {
            File::makeDirectory($path, $mode = 0755, true, true);

        } 
        else {}

        $pdf = PDF::loadView('pdf.orderConfirmationPdf', $data)->save(''.$path.'/'.$filename.'.pdf');
        ;

        return $pdf->download(''.$filename.'.pdf');
    }

person Giovanni Desramault    schedule 10.11.2018