您好我使用了以下链接中的代码,允许将图像上传到服务器。 Summernote image upload
如果用户从编辑器中删除图像,是否可以实现类似的操作从服务器中删除图像?如果是这样,我该如何实现这一目标?
答案 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';
}
?>
这就是我使用的,就是这样,删除事件不会像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>