BrownieCoffee's avatar

upload Image to Public/[user-username] ( summernote )

Hi there,

I use Summernote and I'm trying to save image (or images ) in public/app/storage/public/projets/[user-username]/

       libxml_use_internal_errors(true);


        //je crée un nouveau document
        $dom = new \DomDocument();

        //je charge les données en précisant de désactiver l'ajout automatique d'éléments implicites html / body  (LIBXML_HTML_NOIMPLIED) et d'empêcher l'ajout d'un doctype par défaut lorsqu'il n'est pas trouvé.
        $dom->loadHtml($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

        // je viens stoket l'image dans une variable
        $images = $dom->getElementsByTagName('img');

        //  pour chaque <img> dans le champs summernote
        foreach ($images as $key => $image) {
            // je récupère l'attribut 'src' que je vais stoker dans la variable
            $data = $image->getAttribute('src');

            //si la source de l'image est 'data-url'
            if (preg_match('/data:image/', $data)) {
                // je récupère le mimetype
                preg_match('/data:image\/(?<mime>.*?)\;/', $data, $groups);
                $mimeType = $groups['mime'];

                $imageName = gmdate('d_m_Y_h_i_s') . '.' . $mimeType;
                // je stocke le pseudonyme de l'utilisateur dans la variable
                $userFolder = $user->username;
                //je stoke le chemin du dossier que je vais créer par la suite dans une variable
                $storagePath = 'projets/' . $userFolder;

                $path =  $storagePath . '/' . $imageName;

                //si le dossier n'existe pas, je le crée
                if (!Storage::exists($storagePath)) {
                    //je génère le chemin où seront stoker les medias dans une variable
                    // $path;

                
                    $img = Image::make($data)
                        ->encode($mimeType, 100);

                    Storage::put($path, $img);

                }

            
                //     //je retire l'attribut à l'image...
                $image->removeAttribute('src');
                //...et je lui attribut le nouvel attribut
                $image->setAttribute('src', $path);
            }
        }

        //je sauve le document
        $projectContent = $dom->saveHTML();

It fails actually because the image is saved in storage/app/projets/[user-username]/ . In the view, the actual link is projets/audrey/08_06_2020_09_17_29.jpeg and I need to this link /storage/projets/audrey/08_06_2020_09_17_29.jpeg.

Can you help me please?

Thank you a lot and see you :).

0 likes
6 replies
MichalOravec's avatar
Level 75

If you need just add /storage/ so add it to your src attribute.

$image->setAttribute('src', "/storage/{$path}");
BrownieCoffee's avatar

@michaloravec thank for you help but my image is not stocked in storage/app/projets/[user-username]/. How can I do to save images in public/app/storage/public/projets/[user-username]/

MichalOravec's avatar

When you use public disk you have to create symlink with

php artisan storage:link

Please or to participate in this conversation.