BrownieCoffee's avatar

Serialization of 'Illuminate\Http\UploadedFile' is not allowed

Hello there,

I'm trying to store my project. I created Services/ProjectServices.php like I seen in this video https://www.youtube.com/watch?v=ShrS3HXwzPg, to refactor my code.

Services/PostServices.php

<?php

namespace App\Services;

use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;


// use App\User;
// use App\Project;
// use Illuminate\Http\Request;


class ProjectService
{


    public function uploadThumbnailToUserProjectFolder()
    {

        $project = session('project');
        $project_thumbnail = session('thumbnail');
        $project_author = session('author');

        // dd($project_thumbnail);

        //je stoke le pseudonyme de l'utilisateur dans une variable
        $userFolder = $project_author->username;
        // je stocke le chemin dans lequel sera le thumbnail dans une variable
        $storagePath = 'projets/' . $userFolder . '/thumbnail';
        //je supprime le thumbnail actuel
        Storage::delete('public/' . $storagePath . '/' . $project->thumbnail);

        //si le chemin dans chemin dans lequel sera le thumbnail n'existe pas
        if (!Storage::exists($storagePath)) {
            // je  le crée.
            $storagePath;
        }

        // je donne un nom customisé au fichier
        $new_name = 'thumbnail_' . gmdate('d_m_Y_h_i_s') . '.' . $project_thumbnail->getClientOriginalExtension();
        //je le déplace dans le dossier 'public/projets/[pseudonyme-utilisateur]/thumbnail
        $project_thumbnail->move(public_path("/storage/{$storagePath}"), $new_name);

        //j'indique que le thumbnail du projet aura pour nom le nom customisé
        $project->thumbnail = $new_name;


        $projectThumb = $project->thumbnail;


        return $projectThumb;
    }
}

in my ProjectController.php / store I call this function

  public function store(StoreProject $request, ProjectService $projectService)
    {
        //pour une question de sécurité, je recherche l'utilisateur connecté
        $user = Auth::user();


        // je récupère mon auteur que je stocke en session pour le passer à mon service 'ProjectSertvice -> transformBase64Url()
        session(['author' => Auth::user()]);
        // je récupère mon l'input 'content' que je stocke en session pour le passer à mon service 'ProjectSertvice -> transformBase64Url()
        session(['content' => $request->input('content')]);

        // $this->getUrlToImage();

        // je retrouve la catégorie en correspondance avec celle sélectionnée dans le formulaire
        $cat = Category::where('id', $request->category)->firstOrFail('id');

        $difficulty = DifficultyLevel::where('id', $request->difficulty)->firstOrFail('id');

        //je retrouve l'unité de mesure en correspondance avec celle sélectionnée dans le formulaire
        $unity = UnityOfMeasurement::where('id', $request->unity_of_measurement)->firstOrFail('id');


        //je crée le project
        $project = new Project([
            'user_id' => $user->id, //je donne l'id de l'utilisateur connecté
            'category_id' => $cat->id, //je donne l'id de la catégorie
            'difficulty_level_id' => $difficulty->id,
            'title' => $request->title,
            'duration' => $request->duration,
            'unity_of_measurement_id' => $unity->id, //je donne l'id de l'unité de mesure
            'budget' => $request->budget,
            'content' => $projectService->transformBase64ToUrl()
        ]);

        session(['project' => $project]);


        if ($request->has('thumbnail')) {

            session(['thumbnail' => $request->file('thumbnail')]);

         
            $projectService->uploadThumbnailToUserProjectFolder();
        }

        $project->save();


       ...
            }
        }


        if ($request->input('submit') == 'draft') {
            return redirect()->route('projets.edit', [
                'project' => $project
            ])->with('status', 'votre projet a été sauvé comme brouillon !');
        }


        if ($request->input('submit') == 'publish') {
            $project->update([
                'status_id' => 2
            ]);

            return redirect()->route('projets.show', [
                'project' => $project
            ])->with('status', 'Projet publié !');
        }
    }

When I attempt to store my project I have this exeption Serialization of 'Illuminate\Http\UploadedFile' is not allowed . I know it's a problem of passing upload file like it says here https://laracasts.com/discuss/channels/laravel/message-serialization-of-illuminatehttpuploadedfile-is-not-allowed , but I don't know how to do that ...

Can you help me to fix that please?

Thank you in advance. See you+.

0 likes
1 reply
BrownieCoffee's avatar
BrownieCoffee
OP
Best Answer
Level 2

It's works finally but I don't know why...

I edit however

My ProjectService.

<?php

namespace App\Services;

use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;

class ProjectService
{

    public $request;
    public $project;
    public $thumbnail;



    public function uploadThumbnailToUserProjectFolder($project, $user, $thumbnail)
    {

        $userFolder = $user->username;

        $project_identifier = '/projet_' . $project->id_number;
        $storagePath = 'projets/' . $userFolder . $project_identifier . '/thumbnail';


        if (!Storage::exists($storagePath)) {
            // je récupère mon image que je vais stoker dans le dossier avatars/[nom-de-l'utilisateur] dans le storage local 'public/'
            $storagePath;
        }

        $new_name = 'thumbnail_' . gmdate('d_m_Y_h_i_s') . '.' . $thumbnail->getClientOriginalExtension();
        $thumbnail->move(public_path("/storage/{$storagePath}"), $new_name);

        // set image with the new name
        $project->thumbnail = $new_name;

        $projectThumb = $project->thumbnail;

        return $projectThumb;
    }
}


and that in my Projectcontroller.php / store


        if ($request->has('thumbnail')) {
            $thumbnail = $request->file('thumbnail');
            $projectService->uploadThumbnailToUserProjectFolder($project, $user, $thumbnail);
        }

Please or to participate in this conversation.