高分求thinkphp中设置xheditor图片上传详细步骤。。。

2025-04-09 11:57:14
推荐回答(2个)
回答1:

  1. 先在页面上面配置获取百度配置文件地址:window.UEDITOR_CONFIG.serverUrl = xx;

  2. 后面的就是服务器端了


  3. namespace Admin\Controller;
    use Admin\Service\BaseService;

    class UeditorController extends BaseService{
        public function _empty(){
            $action = I('get.action','','htmlspecialchars');
            $callback = I('get.callback');
            $result = null;
            switch ($action) {
                case 'config':
                    $result = json_encode($this->_Config());
                    break;

                /* 上传图片 */
                case 'uploadimage':
                    /* 上传涂鸦 */
                case 'uploadscrawl':
                    /* 上传视频 */
                case 'uploadvideo':
                    /* 上传文件 */
                case 'uploadfile':
                    $result = $this->_Upload($action);
                    break;

                /* 列出图片 */
                case 'listimage':
                    /* 列出文件 */
                case 'listfile':
                    $result = $this->_list($action);
                    break;
                /* 抓取远程文件 */
                case 'catchimage':
                    $result = $this->_crawler();
                    break;

                default:
                    $result = json_encode(array(
                        'state'=> '请求地址出错'
                    ));
                    break;
            }

            if (isset($_GET["callback"])) {
                if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
                    echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
                } else {
                    echo json_encode(array(
                        'state'=> 'callback参数不合法'
                    ));
                }
            } else {
                echo $result;
            }
        }
        private function _Config(){
            $CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(APP_PATH .'Admin/Conf/config.json')), true);
            $CONFIG['imageMaxSize'] = UPLOAD_IMAGE_SIZE;
            $CONFIG['scrawlMaxSize'] = UPLOAD_IMAGE_SIZE;
            $CONFIG['catcherMaxSize'] = UPLOAD_IMAGE_SIZE;
            $CONFIG['videoMaxSize'] = UPLOAD_VIDEO_SIZE;
            $CONFIG['fileMaxSize'] = UPLOAD_FILE_SIZE;
            $CONFIG['scrawlUrlPrefix'] = ATTACH_URL;
            $CONFIG['imageUrlPrefix'] = ATTACH_URL;
            $CONFIG['snapscreenUrlPrefix'] = ATTACH_URL;
            $CONFIG['catcherUrlPrefix'] = ATTACH_URL;
            $CONFIG['videoUrlPrefix'] = ATTACH_URL;
            $CONFIG['fileUrlPrefix'] = ATTACH_URL;
            $CONFIG['imageManagerUrlPrefix'] = ATTACH_URL;
            $CONFIG['fileManagerUrlPrefix'] = ATTACH_URL;
            return $CONFIG;
        }
        private function _Upload($action){
            $config = $this->_Config();
            $up = new \Lib\Extend\Upload();
            $type = '';
            switch ($action) {
                case 'uploadimage':
                    $fieldName = $config['imageFieldName'];
                    $type = 'image';
                    break;
                case 'uploadscrawl':
                    $fieldName = $config['scrawlFieldName'];
                    $type = 'base64';
                    break;
                case 'uploadvideo':
                    $fieldName = $config['videoFieldName'];
                    $type = 'video';
                    break;
                case 'uploadfile':
                default:
                    $fieldName = $config['fileFieldName'];
                    $type = 'file';
                    break;
            }
            if($type == 'base64'){
                $result = $up->saveBase64($fieldName);
            }else{
                $result = $up->save($fieldName,$type);
            }
            return json_encode($result);
        }
        private function _list($action){
            $config = $this->_Config();
            switch ($action) {
                /* 列出文件 */
                case 'listfile':
                    $allowFiles = $config['fileManagerAllowFiles'];
                    $listSize = $config['fileManagerListSize'];
                    break;
                /* 列出图片 */
                case 'listimage':
                default:
                    $allowFiles = $config['imageManagerAllowFiles'];
                    $listSize = $config['imageManagerListSize'];
            }
            $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 = UPLOAD_PATH;
            $files = $this->_getfiles($path, $allowFiles);
            if (!count($files)) {
                return json_encode(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];
            }
            return json_encode(array(
                "state" => "SUCCESS",
                "list" => $list,
                "start" => $start,
                "total" => count($files)
            ));
        }
        private function _getfiles($path, $allowFiles, &$files = array()){
            if (!is_dir($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(UPLOAD_PATH)),
                                'mtime'=> filemtime($path2)
                            );
                        }
                    }
                }
            }
            return $files;
        }
        private function _crawler(){
            $config = $this->_Config();
            $fieldName = $config['catcherFieldName'];
            $up = new \Lib\Extend\Upload();
            $source = I($fieldName);
            $result = array();
            foreach($source as $imgUrl){
                $item = $up->saveRemote($imgUrl);
                array_push($list, array(
                    "state" => $item["state"],
                    "url" => $item["url"],
                    "size" => $item["size"],
                    "title" => htmlspecialchars($item["title"]),
                    "original" => htmlspecialchars($item["original"]),
                    "source" => htmlspecialchars($imgUrl)
                ));
            }
            return json_encode($result);
        }

    }

回答2:

参考xheditor官网的教程,里面有很详细的使用指南。