说ueditor上传图片功能

浏览:2918 发布日期:2015/12/09 分类:功能实现 关键字: ueditor 上传
说ueditor上传图片功能
借鉴了ueditor自带的php代码,和ot中的相关代码。
此代码已发布到我的csdn当中<?php
// +----------------------------------------------------------------------
// | UploaderController 
// +----------------------------------------------------------------------
// | Copyright (c) 2015 AntDz All rights reserved.
// +----------------------------------------------------------------------
// | Author: antdz <vip_antdz@163.com>
// +----------------------------------------------------------------------
namespace Admin\Controller;
use Think\Controller;
@ini_set('upload_max_filesize', '20M');

class UploaderController extends Controller {
    public function index() {
        $this -> display();
    }

    /**
     * 用于百度ueditor
     * 其中UE_CONFIG在config文件中定义
     */

    public function manager() {
        date_default_timezone_set("Asia/Chongqing");

        $CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(C('UE_CONFIG'))), true);
        $action = $_GET['action'];

        switch ($action) {
            case 'config' :
                $result = $CONFIG;
                break;
            case 'listfile' :
            case 'listimage' :
                $result = $this -> lists($CONFIG, $action);
                break;
            /* 上传图片 */
            case 'uploadimage' :
            /* 上传涂鸦 */
            case 'uploadscrawl' :
                $config = array('maxSize' => $CONIFG['imageMaxSize'], 'rootPath' => C('UPLOAD_PATH'), 'savePath' => 'images/', 'saveName' => array('uniqid', ''), 'exts' => $CONIFG['imageAllowFiles'], 'autoSub' => true, 'subName' => array('date', 'Ymd'), );
                $result = $this -> up($config);
                break;
            /* 上传视频 */
            case 'uploadvideo' :
                $config = array('maxSize' => $CONIFG['videoMaxSize'], 'rootPath' => C('UPLOAD_PATH'), 'savePath' => 'videos/', 'saveName' => array('uniqid', ''), 'exts' => array('jpg', 'gif', 'png', 'jpeg', 'zip', 'doc', 'pdf'), 'autoSub' => true, 'subName' => array('date', 'Ymd'), );
                $result = $this -> up($config);
                break;
            /* 上传文件 */
            case 'uploadfile' :
            default :
                $config = array('maxSize' => $CONIFG['fileMaxSize'], 'rootPath' => C('UPLOAD_PATH'), 'savePath' => 'files/', 'saveName' => array('uniqid', ''), 'exts' => $CONIFG['fileManagerAllowFilesarray'], 'autoSub' => true, 'subName' => array('date', 'Ymd'), );
                $result = $this -> up($config);
                break;
        }
        /* 输出结果 */
        if (isset($_GET["callback"])) {
            if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
                $this -> ajaxReturn($result, 'JSON');
            } else {
                $tmp = array('state' => 'callback参数不合法');
                $this -> ajaxReturn($tmp, 'JSON');
            }
        } else {
            //echo $result;
            $this -> ajaxReturn($result, 'JSON');
        }
    }

    /**
     * 用于百度编辑器上传功能
     */

    public function up($config) {
        //TODO:删除不删除?
        @ini_set('upload_max_filesize', '20M');

        $Picture = D('Picture');
        $file_driver = C('PICTURE_UPLOAD_DRIVER');
        $info = $Picture -> upload($_FILES, $config, C('PICTURE_UPLOAD_DRIVER'), C("UPLOAD_{$file_driver}_CONFIG"));

        if ($info) {
            if ($info['upfile']['url'] == "") {
                return array('url' => __ROOT__ . $info['upfile']['path'], 'title' => htmlspecialchars($_POST['pictitle'], ENT_QUOTES), 'original' => $info['upfile']['name'], 'state' => 'SUCCESS');
            } else {
                return array('url' => $info['upfile']['url'], 'title' => htmlspecialchars($_POST['pictitle'], ENT_QUOTES), 'original' => $info['upfile']['name'], 'state' => 'SUCCESS');
            }

        } else {
            return array('state' => $Picture -> getError());
            //获取失败信息
        }
    }

    /**
     *百度编辑器列出本地服务器上传目录
     *
     *
     **/
    public function lists($config, $type) {
        switch ($type) {
            case 'listfile' :
                $allowFiles = $config['fileManagerAllowFiles'];
                $listSize = $config['fileManagerListSize'];
                $path = $config['fileManagerListPath'];
                break;

            default :
                $allowFiles = $config['imageManagerAllowFiles'];
                $listSize = $config['imageManagerListSize'];
                $path = $config['imageManagerListPath'];
                break;
        }

        $allowFiles = substr(str_replace(".", "|", join("", $allowFiles)), 1);
        /* 获取参数 */
        $size = isset($_GET['size']) ? htmlspecialchars($_GET['size']) : $listSize;
        $start = isset($_GET['start']) ? htmlspecialchars($_GET['start']) : 0;
        $end = $start + $size;

        /* 获取文件列表 */
        $path = DOC_ROOT . C('UPLOAD_PATH');
        $files = $this -> getfiles($path, $allowFiles);
        if (!count($files)) {
            return array("state" => "no match file", "list" => array(), "start" => $start, "total" => count($files));
        }

        /* 获取指定范围的列表 */
        $len = count($files);
        for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--) {
            $list[] = $files[$i];
        }

        $result = array("state" => "SUCCESS", "list" => $list, "start" => $start, "total" => count($files));
        return $result;
    }

    /**
     * 获取本地文件
     */

    function getfiles($path, $allowFiles, &$files = array()) {
        if (!is_dir($path)) {
            exit('E1:path is wrong ' . $path);
            return null;
        }
        if (substr($path, strlen($path) - 1) != '/')
            $path .= '/';
        $handle = opendir($path);
        while (false !== ($file = readdir($handle))) {
            if ($file != '.' && $file != '..') {
                $path2 = $path . $file;
                if (is_dir($path2)) {
                    $this -> getfiles($path2, $allowFiles, $files);
                } else {
                    if (preg_match("/\.(" . $allowFiles . ")$/i", $file)) {
                        $files[] = array('url' => substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])), 'mtime' => filemtime($path2));
                    }
                }
            }
        }
        return $files;
    }

    /**
     * 上传图片
     * @author huajie <banhuajie@163.com>
     */
    public function uploadPicture() {

        /* 返回标准数据 */
        $return = array('status' => 1, 'info' => '上传成功', 'data' => '');

        /* 调用文件上传组件上传文件 */
        $Picture = D('Picture');
        $file_driver = C('PICTURE_UPLOAD_DRIVER');
        $info = $Picture -> upload($_FILES, C('PICTURE_UPLOAD'), C('PICTURE_UPLOAD_DRIVER'), C("UPLOAD_{$file_driver}_CONFIG"));
        //TODO:上传到远程服务器

        /* 记录图片信息 */
        if ($info) {
            $return['status'] = 1;
            $return = array_merge($info['download'], $return);
        } else {
            $return['status'] = 0;
            $return['info'] = $Picture -> getError();
        }

        /* 返回JSON数据 */
        $this -> ajaxReturn($return);
    }

}
评论( 相关
后面还有条评论,点击查看>>