ueditor二次开发:在线管理图片列表添加删除功能jsp版和php版
第一步: 需要增加一个后端请求删除的url
ueditor\jsp\config.json中添加代码
/*删除指定目录下的文件或图片*/ "imageDelUrl":"删除图片的提交url",
第二步:增加js删除方法,放到ueditor/dialogs/image/image.html里面 :
//新增在线管理删除图片 function uedel(path, id){ if(confirm(‘您确定要删除它吗?删除后不可恢复!‘)){ var url = editor.getOpt(‘imageDelUrl‘); $.get(url,{‘path‘:path},function(data){ if (data.state == ‘success‘) { alert(data.message); $("#"+id).parent("li").remove(); }else{ alert(data.message); } },‘json‘); } }
提交的url从conf文件获取,editor.getOpt('imageDelUrl'),这是自带的方法 可以自定义url。
第三步: 修改ueditor/dialogs/image/image.js文件(大约902行)
del = document.createElement('a'); del.innerHTML = '删除'; domUtils.addClass(del, 'del'); var delid='imagelist_'+i; del.setAttribute('id',delid); del.setAttribute('href','javascript:;'); del.setAttribute('onclick','uedel("'+list[i].url+'","'+delid+'")');
在
item.appendChild(img);
item.appendChild(icon);
的后面(大概924行)增加一句:item.appendChild(del); 为了把a标签加载进去,
或者如下
.... /* 在这两句之后添加 */ item.appendChild(img); item.appendChild(icon); /* 添加删除功能 */ item.appendChild($("<span class='delbtn' url='" + list[i].url + "'></span>").click(function() { var del = $(this); try{ window.event.cancelBubble = true; //停止冒泡 window.event.returnValue = false; //阻止事件的默认行为 window.event.preventDefault(); //取消事件的默认行为 window.event.stopPropagation(); //阻止事件的传播 } finally { if(!confirm("确定要删除吗?")) return; $.post(editor.getOpt("serverUrl") + "?action=deleteimage", { "path": del.attr("url") }, function(result) { if (result == "ok") del.parent().remove(); else alert(result); }); } })[0]); /* 在这一句之前添加 */ this.list.insertBefore(item, this.clearFloat); ....
到这里已经有了“删除”链接了 具体样式修改 ueditor/dialogs/image/image.css 我是直接在末尾添加:
/* 新增在线管理删除图片样式*/ #online li a.del { width: auto; position: absolute; top: 0; right: 0; color:#F00; background-color:#DDDDDD; opacity:0.8; filter:alpha(80); border: 0; z-index:3; text-align:right; text-decoration:none; }
或者
/* 在线管理删除按钮样式 */ #online li .delbtn { position: absolute; top: 0; right: 0; border: 0; z-index: 3; color: #ffffff; display: inline; font-size: 12px; line-height: 10.5px; padding:3px 5px; text-align: center; background-color: #d9534f; }
效果如下:
第四步:实现删除图片的服务端方法
我的是ueditor的jsp版本:
public void deleteFile(){ //图片和文件管理中的删除 String path = ServletActionContext.getServletContext().getRealPath("").replaceAll("\\\\", "/"); System.out.println("========================================path:"+path); HttpServletRequest request = Struts2Utils.getRequest(); String pathName = this.getQueryParameter(request, "pathName"); String filePath = path + pathName; File file = new File(filePath); // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 if (file.exists()) { file.delete(); System.out.println("删除成功"); } else { System.out.println("文件不存在"); } }
ueditor的php版本,参考了网上的,不知道对不对:
(放到您的控制器里面即可,我的是UploadifyController 和第一步的$this->createUrl('uploadify/ajaxDel');相对应 ):
/** * 直接删除路径文件 * */ public function actionAjaxDel(){ $file = $this->_request->getParam('path'); $firstchar = substr($file,0,1); if(in_array($firstchar, array('/','\\'))){ $file = substr($file,1); } try { if($file && file_exists($file)){ unlink($file); $var['state'] = 'success'; $var['message'] = '删除完成'; } else{ $var['state'] = 'error'; $var['message'] = '删除失败,未找到'.$file; } } catch (Exception $e){ $var['state'] = 'error'; $var['message'] = '删除失败:'.$e->getMessage(); } exit(CJSON::encode($var)); }
网上找的其他php写法
需要添加一个 php 文件来实现删除功能,文件添加到: ueditor\php\action_delete.php 代码内容:
<?php /*--------------------------- * wang *zhibeiwang.blog.51cto.com * 2017-08-10 * action_delete.php * 删除 Ueditor 目录下的文件 *---------------------------*/ try { //获取路径 $path = $_POST['path']; $path = str_replace('../', '', $path); $path = str_replace('/', '\\', $path); //安全判断(只允许删除 ueditor 目录下的文件) if(stripos($path, '\\ueditor\\') !== 0) { return '非法删除'; } //获取完整路径 $path = $_SERVER['DOCUMENT_ROOT'].$path; if(file_exists($path)) { //删除文件 unlink($path); return 'ok'; } else { return '删除失败,未找到'.$path; } } catch (Exception $e) { return '删除异常:'.$e->getMessage(); }
第二,需要在 ueditor\php\controller.php 文件的 switch 中添加命令 deleteimage 的处理:
.... switch ($action) { .... /* 删除图片命令处理 */ case 'deleteimage': $result = include('action_delete.php'); break; /* 在 default 之前添加 */ default: $result = json_encode(array( 'state'=> '请求地址出错' )); break; } ....
参考:
https://cloud.tencent.com/info/7694a3e6663c7682301253b39941b296.html