Summernote – Удалить изображение с сервера

Привет, я использовал код из следующей ссылки, чтобы разрешить загрузку изображений на сервер. Загрузка изображения Summernote

Можно ли реализовать что-то подобное, чтобы удалить изображение с сервера, если пользователь удалит его из редактора? Если да, то как я могу добиться этого?

    Наверное, вы решили проблему до сих пор, но поскольку я искал тот же ответ и, наконец, сумел заставить его работать, это мой подход:

    Сначала я получаю все img src в textarea summernote, затем я читаю все файлы img в папке на сервере. После этого я unlink файлы в папке, которые не находятся в массиве img src summernote.

      $dom = new domDocument; $dom->loadHTML(html_entity_decode($content)); $dom->preserveWhiteSpace = false; $imgs = $dom->getElementsByTagName("img"); $links = array(); $path = '../content/'.$id.'/'; $files = glob($path . "*.*"); for($i = 0; $i < $imgs->length; $i++) { $links[] = $imgs->item($i)->getAttribute("src"); } $result=array_diff($files, $links); foreach($result as $deleteFile) { if (file_exists($deleteFile)) { array_map('unlink', glob($deleteFile)); } } } 

    Надеюсь, это поможет другим.

    EDIT, чтобы ответить на @ehotone: вы можете использовать AJAX тоже (я делаю это с jQuery).

     $('#DivContainingSummernoteTextarea').blur(function(){ $contentPost = $("#SummernoteTextarea").code(); doAjax('something'); }); - $('#DivContainingSummernoteTextarea').blur(function(){ $contentPost = $("#SummernoteTextarea").code(); doAjax('something'); }); 

    Я храню содержимое текстовой области summernote в $contentPost . Затем doAjax вызовет $content PHP и POST $content . Если img на сервере не находится в $content он будет удален.

    Если мы сможем поймать событие для удаления пользователем действия с изображением на стороне клиента, мы можем сделать ajax-вызов для удаления изображения. но я не знаю, есть это или нет. Я также ищу решение.

    Чтобы удалить файл формы сервера, вам необходимо использовать onMediaDelete но использование зависит от разных версий summernote, которые иногда трудно найти в документах.

    FOR SUMMERNOTE 0.6.x

     $(document).ready(function() { $('.summernote').summernote({ height: "300px", onMediaDelete : function($target, editor, $editable) { alert($target.context.dataset.filename); $target.remove(); } }); }); 

    FOR SUMMERNOTE 0.7.x

     $(document).ready(function() { $('.summernote').summernote({ height: "300px", onMediaDelete : function(target) { deleteFile(target[0].src); } }); }); 

    FOR SUMMERNOTE 0.8.x (Использовать обратные вызовы)

     $(document).ready(function() { $('#summernote').summernote({ height: "300px", callbacks: { onImageUpload: function(files) { uploadFile(files[0]); }, onMediaDelete : function(target) { // alert(target[0].src) deleteFile(target[0].src); } } }); }); 

    Javascript: пример удаления файла с помощью img src

     function deleteFile(src) { $.ajax({ data: {src : src}, type: "POST", url: base_url+"dropzone/delete_file", // replace with your url cache: false, success: function(resp) { console.log(resp); } }); } 

    PHP: пример удаления изображения afeter, возвращающего img src

     <?php $src = $this->input->post('src'); // $src = $_POST['src']; $file_name = str_replace(base_url(), '', $src); // striping host to get relative path if(unlink($file_name)) { echo 'File Delete Successfully'; } ?> 

    введите описание изображения здесь

    Это то, что я использовал, именно так, событие delete не запускается при нажатии клавиши, как backspace, возможно, keyEvent будет обрабатывать это в будущем.