编辑器中上传文件处理

浏览:1607 发布日期:2013/12/28 分类:求助交流 关键字: editor kindeditor 上传
场景:编辑器中上传图片,上传完成后,并不提交!
后果:服务器上存在无用图片。

我的解决方案:
1、编辑器中上传图片时,统一上传到一固定临时目录tmp。
2、表单提交成功后,移动图片到指定目录,同时修改文本内容中图片地址到指定路径。<script type="text/javascript">
var editor;
KindEditor.ready(function(K) {
    editor = K.create('textarea[name="content"]', {
        allowFileManager : true,
            uploadJson : "{:U('Public/Public/upload')}",    //kindeditor编辑器图片上传请求url
        uploadFilePath : 'Public/Upload/tmp/',        //文件上传临时目录,这里曾经改过kindeditor代码,可以直接在后端指定。
        items : [
            'image', 'media', 'emoticons', 'link'
        ]
    });
})
</script>
<?php
    /**
     * Kindeditor上传回调接口
     */
    public function upload(){
        $this->hasPriv();    //判断是否登录
        import("ORG.Net.UploadFile");
        $upload = new UploadFile();
        $dir_name = empty($_GET['dir']) ? 'image' : trim($_GET['dir']);
        $ext = array(
            'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
            'flash' => array('swf', 'flv'),
            'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
            'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
        );
           $upload->allowExts = $ext[$dir_name];
           $upload->maxSize = $dir_name == 'image' ? 2048000 : 102400000;
            $upload->savePath = I('post.uploadFilePath');
            if(!$upload->upload()){
                echo json_encode(array('error' => 1,'message' => $upload->getErrorMsg()));
                exit;
            }
            $uploadFileInfo = $upload->getUploadFileInfo();
            echo json_encode(array('error' => 0,'url' => __ROOT__.'/'.$uploadFileInfo[0]['savepath'] . $uploadFileInfo[0]['savename']));
            exit;
    }
     /**
     * 发表文章
     */
    public function add(){
        if(IS_AJAX){
            $data = $_POST['key'];    //表单提交数据
            $data['uid'] = $this->_user['uid'];        
            $Ta = D('Article');
            $text_do_pic = text_do_pic($data['content'],'Public/Upload/travelcomment/');    //修改文章内容中的图片地址
            $data['content'] = $text_do_pic[0];
            if(!$Ta->create($data))
                $this->ajaxReturn('',$Tc->getErrorMsg(),0);        
            if(!$Ta->add())
                $this->ajaxReturn('','失败!',0);
            // 文章发表成功,移动图片到指定目录
            foreach($text_do_pic[1] as $k => $v) {
                if(!rename($v,$text_do_pic[2][$k]))
                    Log::write('Fail:[文章id:'.$Ta->tid.']','INFO',3,'./Public/Data/logs/article_add_'.date('y_m_d').'.log');    //移动失败,写入log
            }
            $this->ajaxReturn('','成功!',1);
        }
    }
    //写在common.php中的函数。修改编辑器中上传的文本内容中的图片地址为指定目录地址。
    function text_do_pic(&$text,$path){
        preg_match_all('/<img src=\"(\/.*[\.gif|\.jpg|\.png|\.jpeg])\".*\/>/',$text, $matches);
        $dir = $path.date('Ymd').'/';
        mkdir($dir, true);
        foreach($matches[1] as $k => $v){
            $tof = strpos($v,__ROOT__);
            $name[] = false === $tof ? $v : substr($v, strlen(__ROOT__.'/'));      
            $rename[] = $dir.basename($v);
            $rename2 = false === $tof ? $rename[$k] : __ROOT__.'/'.$rename[$k];          
            if(is_file($name[$k])){
                $searchs[] = $matches[0][$k];
                $replace[] = str_replace($v, $rename2, $matches[0][$k]);
            }
        }
        return array(str_replace($searchs, $replace, $text),$name,$rename);
    }
?>
更好的方案:
估计是采用图片空间管理,让用户自己删除多余的图片,限制用户的总容量。
最佳答案
评论() 相关
后面还有条评论,点击查看>>