Summernote - 从服务器删除图像

时间:2015-01-21 22:38:50

标签: php jquery html summernote

您好我使用了以下链接中的代码,允许将图像上传到服务器。 Summernote image upload

如果用户从编辑器中删除图像,是否可以实现类似的操作从服务器中删除图像?如果是这样,我该如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

要删除文件格式服务器,您需要使用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';
        }
?>

enter image description here

这就是我使用的,就是这样,删除事件不会像keyspace那样在按键上触发,也许keyEvent将来会处理它。

答案 1 :(得分:1)

我猜你现在已经解决了这个问题,但是我一直在寻找相同的答案,最终设法让它在这里工作是我的方法:

首先,我获取了summernote img src中的所有textarea,然后我读取了服务器上文件夹中的所有img个文件。之后,我unlink文件夹中不在summernote的img src数组中的文件。

        $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));
               }
           }
       } 

希望这会有所帮助。

编辑回答@eachone: 你也可以使用AJAX(我用jQuery做)。

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

我将summernote的textarea的内容存储在$contentPost中。然后doAjax将调用PHP和POST $content。如果服务器上的img不在$content,则会将其删除。

答案 2 :(得分:0)

在Django中,我使用正则表达式在原始html中查找img。 如果我要删除帖子,或者在编辑后它具有不同的img,则要删除它们

<div class="box-1"></div>