Как сохранить и обновить изображения из summernote с помощью PHP vanilla или Laravel - PullRequest
0 голосов
/ 12 июля 2020

Как сохранять и обновлять изображения летних заметок с помощью PHP.

Изображения Summernote находятся в base64 и, следовательно, должны быть декодированы, загружены и затем изменены данные изображения sr c содержимого summnernote с помощью каталог загрузки изображения перед сохранением содержимого летней заметки в БД. Потому что не рекомендуется сохранять БД с информацией об изображениях.

Когда я сохраняю тот же каталог пути img / location загруженного изображения в БД, summernote не может отображать изображения, когда я пытаюсь отредактируйте содержимое летней заметки из DB <textarea>{{$dbData->content}}</textarea>

Кроме того, вам необходимо проверить, действительно ли img sr c действительно изображение base64 перед декодированием, потому что при редактировании уже сохраненного содержимого существующий img sr c не будет образом base64, за исключением новых, которые еще не были загружены, поскольку существующий img sr c уже был декодирован и загружен.

1 Ответ

0 голосов
/ 12 июля 2020
  1. Чтобы избежать ошибки, вызывающей неправильные форматы HTML, используйте LIBXML_NOWARNING | LIBXML_NOERROR
  2. Также простой способ обнаружить изображение base64 в img sr c - это обнаружить data: image в строке. это не оптимальный способ, но решит без проблем.
  3. Наконец, предшествующий прямой sla sh " / " из img sr c, изменяемого в содержимом летней заметки, решит проблему изображения, не отображаемого в содержимом летней заметки после получения результата из БД

Если у вас есть какие-либо рекомендации и оптимальные способы, любезно прокомментируйте, и я буду рад. Спасибо. Код (Мое решение)

    //checking if request  is set
       if (isset($request->long_description)) {
        
        $detail=$request->long_description;
        
        //Prepare HTML & ignore HTML errors
        $dom = new \domdocument();
        $dom->loadHtml($detail, LIBXML_NOWARNING | LIBXML_NOERROR);

        //identify img element
        $images = $dom->getelementsbytagname('img');

         //loop over img elements, decode their base64 source data (src) and save them to folder,
        //and then replace base64 src with stored image URL.
        foreach($images as $k => $img){

            //collect img source data
            $data = $img->getattribute('src');

            //checking if img source data is image by detecting 'data:image' in string
            if (strpos($data, 'data:image')!==false){
            list($type, $data) = explode(';', $data);
            list(, $data)      = explode(',', $data);
            
            //decode base64
            $data = base64_decode($data);

            //naming image file
            $image_name= time().rand(000,999).$k.'.png';

            // image path (path) to use upload file to
            $path = 'img/location/'. $image_name;

            //image path (path2) to save to DB so that summernote can display image in edit mode (When editing summernote content) NB: the difference btwn path and path2 is the forward slash "/" in path2
            $path2 = '/img/location/'. $image_name;

            file_put_contents($path, $data);

            modify image source data in summernote content before upload to DB
            $img->removeattribute('src');
            $img->setattribute('src', $path2);
}

     else {
        // not base64 img

}
            
        }
        // final variable to store in DB
        $detail = $dom->savehtml();
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...