• 云起网 二次开发 -> ueditor二次开发:在线管理图片列表添加删除功能jsp版和php版

ueditor二次开发:在线管理图片列表添加删除功能jsp版和php版

  • 发布于2019-05-21
  • 96 人围观
官方下载的编辑器在线管理图片列表,没有删除功能的问题

第一步: 需要增加一个后端请求删除的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

标签:
关键词: