这个应该算是准原创吧,PHP接收上传部分参考了大部分原Ueditor里的上传操作。整合进了Thinkphp5,使用方法大概介绍一下,如果放在后台使用,那么建议另存一份ueditor.config.js 修改里面的ServerUrl至后台中的某控制器,这些不用考虑登录权限及验证的问题。毕竟如果未登录的肯定是无法访问后台URL的。如果是前台管理的,另存一份将ServerURL改成对应的控制器地址。
由于参考了Uedior原ServerUrl中的写法,也许你会感觉这里的switch写的有点啰嗦。如果遇到区别较大的上传配置还是有必要这么写的。
废话不说,直接上代码。
#181203修正上传文件上传至上传目录根目录,未移到到指定目录。UeUpload.php151行左右。
一、资源部署
1.1 下载ueditor放到 public/static目录下,这个根据自己基本的部署来安排文件夹就行。我放在 static/libs/ueditor目录下
1.2 删除ueditor目录下的php目录或移到别的地方去。静态目录下是绝对不允许执行PHP的。
1.3 复制一份 ueditor.config.js 重命令为admin.confg.js这个根据自己喜好哦。
这里需要处理一下,该配置文件下有一个 serverUrl参数指向要处理请uediter请求的URL,大概在33行
, serverUrl: "/admin.php/admin/public/ueditor.html"
二、引入文件
<script type="text/javascript" charset="utf-8" src="/static/libs/ueditor/admin.config.js"></script>
<script type="text/javascript" charset="utf-8" src="/static/libs/ueditor/ueditor.all.min.js"> </script>
<script type="text/javascript" charset="utf-8" src="/static/libs/ueditor/lang/zh-cn/zh-cn.js"></script>
<script id="editor_{$name}" name="{$name}" type="text/plain" style="width:100%;height:500px;"></script>
<script>var ue = UE.getEditor('editor_{$name}');</script>
三、写控制器文件
class Public extends Admin{
public function ueditor(){
$action = input('action','','filter_keyword');
$callback = input('callback','','filter_keyword');
$myUpload = new UeUpload();
$upConfig = $myUpload->config();
switch ($action){
case 'config': //获取配置信息
$result = $upConfig;
break;
case 'uploadimage': //上传图片
$currConfig = [
'pathFormat' => $upConfig['imagePathFormat'], //配置文件中图片方面的配置数据
'maxSize' => $upConfig['imageMaxSize'],
'allowFiles' => $upConfig['imageAllowFiles'],
];
$fieldName = $upConfig['imageFieldName'];
$myUpload->upload($fieldName, $currConfig,'upload');
$result = $myUpload->getFileInfo();
break;
case 'uploadscrawl': //上传涂鸦,Base64上传
$currConfig = array(
"pathFormat" => $upConfig['scrawlPathFormat'],
"maxSize" => $upConfig['scrawlMaxSize'],
"allowFiles" => $upConfig['scrawlAllowFiles'],
"oriName" => "scrawl.png"
);
$fieldName = $upConfig['scrawlFieldName'];
$myUpload->upload($fieldName,$currConfig,'base64');
$result = $myUpload->getFileInfo();
break;
case 'uploadvideo': //上传视频
$currConfig = array(
'pathFormat' => $upConfig['videoPathFormat'],
'maxSize' => $upConfig['videoMaxSize'],
'allowFiles' => $upConfig['videoAllowFiles'],
);
$fieldName = $upConfig['videoFieldName'];
$myUpload->upload($fieldName, $currConfig);
$result = $myUpload->getFileInfo();
break;
case 'uploadfile': //上传文件
$currConfig = array(
'pathFormat' => $upConfig['filePathFormat'],
'maxSize' => $upConfig['fileMaxSize'],
'allowFiles' => $upConfig['fileAllowFiles'],
);
$fieldName = $upConfig['fileFieldName'];
$myUpload->upload($fieldName, $currConfig);
$result = $myUpload->getFileInfo();
break;
case 'listimage': //列出图片
$result = include("action_list.php");
break;
case 'listfile': //列出文件
$result = include("action_list.php");
break;
/* 抓取远程文件 */
case 'catchimage':
$currConfig = [
'pathFormat' => $upConfig['catcherPathFormat'],
'maxSize' => $upConfig['catcherMaxSize'],
'allowFiles' => $upConfig['catcherAllowFiles'],
'oriName' => 'remote.png', //这个配置没有什么意义
];
$fieldName = $upConfig['catcherFieldName'];
$result = $myUpload->uploadCrawler($fieldName,$currConfig);
break;
default:
$result = json_encode(['state'=> '请求地址出错']);
break;
}
if(!empty($callback)){
if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
echo htmlspecialchars($callback) . '(' . $result . ')';
} else {
echo json_encode(['state'=> 'callback参数不合法']);
}
}else{
if(is_array($result)){
echo json_encode($result);
}else{
echo $result;
}
}
}
控制器里只负责获取讲求类型,然后转给UeUpload.class来处理。
四、核心文件UeUpload类
<?php
namespace app\extend\ueditor;
use think\Config;
use think\Request;
class UeUpload{
private $uploadPath;
private $uplaodPrefix; //上传路径前缀
private $fileField; //文件域名
private $file; //文件上传对象
private $base64; //文件上传对象
private $config; //配置信息
private $oriName; //原始文件名
private $fileName; //新文件名
private $fullName; //完整文件名,即从当前配置目录开始的URL
private $filePath; //完整文件名,即从当前配置目录开始的URL
private $fileSize; //文件大小
private $fileType; //文件类型
private $stateInfo; //上传状态信息,
private $stateMap = array( //上传状态映射表,国际化用户需考虑此处数据的国际化
"SUCCESS", //上传成功标记,在UEditor中内不可改变,否则flash判断会出错
"文件大小超出 upload_max_filesize 限制",
"文件大小超出 MAX_FILE_SIZE 限制",
"文件未被完整上传",
"没有文件被上传",
"上传文件为空",
"ERROR_TMP_FILE" => "临时文件错误",
"ERROR_TMP_FILE_NOT_FOUND" => "找不到临时文件",
"ERROR_SIZE_EXCEED" => "文件大小超出网站限制",
"ERROR_TYPE_NOT_ALLOWED" => "文件类型不允许",
"ERROR_CREATE_DIR" => "目录创建失败",
"ERROR_DIR_NOT_WRITEABLE" => "目录没有写权限",
"ERROR_FILE_MOVE" => "文件保存时出错",
"ERROR_FILE_NOT_FOUND" => "找不到上传文件",
"ERROR_WRITE_CONTENT" => "写入文件内容错误",
"ERROR_UNKNOWN" => "未知错误",
"ERROR_DEAD_LINK" => "链接不可用",
"ERROR_HTTP_LINK" => "链接不是http链接",
"ERROR_HTTP_CONTENTTYPE" => "链接contentType不正确",
"INVALID_URL" => "非法 URL",
"INVALID_IP" => "非法 IP"
);
public function __construct()
{
$this->uploadPath = $uploadPath = Config::get('upload.path');
$this->uploadPreFix = Config::get('upload.url_prefix');
}
public function config(){
$uploadPath = $this->uploadPath;
$config = include APP_PATH . 'extend' . DS . 'ueditor' . DS . 'config.php';
//这里需要处理下上传的路径
$config['imagePathFormat'] = $uploadPath . '{yyyy}{mm}{dd}'; //图片上传保存的路径
$config['scrawlPathFormat'] = $uploadPath . '{yyyy}{mm}{dd}/{time}_{rand:12}'; //涂鸦保存路径
$config['snapscreenPathFormat'] = $uploadPath . '{yyyy}{mm}{dd}'; //截图工具存储路径
$config['catcherPathFormat'] = $uploadPath . '{yyyy}{mm}{dd}/remote_{time}_{rand:4}'; //远程抓取存储路径
$config['videoPathFormat'] = $uploadPath . '{yyyy}{mm}{dd}/video_{time}'; //视频上传路径
$config['filePathFormat'] = $uploadPath . '{yyyy}{mm}{dd}/file_{time}'; //文件上传配置
$config['imageManagerListPath'] = $uploadPath . '{yyyy}{mm}{dd}'; //列出指定目录下的图片
$config['fileManagerListPath'] = $uploadPath . '{yyyy}{mm}{dd}'; //列出指定目录下的文件
return $config;
}
/**
*
* @param string $fileField 表单名称
* @param array $config 配置项
* @param bool $base64 是否解析base64编码,可省略。若开启,则$fileField代表的是base64编码的字符串表单名
*/
public function upload($fileField, $config, $type = "upload")
{
$this->fileField = $fileField;
$this->config = $config;
$this->type = $type;
if ($type == "remote") { //接取远程图片
$this->saveRemote();
} else if($type == "base64") { //base64图片上传
$this->upBase64();
} else {
$this->upFile();
}
$this->stateMap['ERROR_TYPE_NOT_ALLOWED'] = iconv('unicode', 'utf-8', $this->stateMap['ERROR_TYPE_NOT_ALLOWED']);
}
/**
* 上传文件的主处理方法
* @return mixed
*/
private function upFile()
{
$fileObj = request()->file($this->fileField);
try{
$file = $this->file = $fileObj->getInfo();
}catch (\Exception $e){
$this->stateInfo = '上传失败';
return;
}
if($file){
if($file['error']){
$this->stateInfo = $this->getStateInfo($file['error']);
return;
}
//2.检查临时文件是否存在
if(!file_exists($file['tmp_name'])) {
$this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND");
return;
}
//3.是否为上传文件
if (!is_uploaded_file($file['tmp_name'])) {
$this->stateInfo = $this->getStateInfo("ERROR_TMPFILE");
return;
}
$this->oriName = $file['name'];
$this->fileSize = $file['size'];
$this->fileType = $this->getFileExt();
$this->fullName = $this->getFullName();
$this->filePath = $this->getFilePath();
$this->fileName = $this->getFileName();
//echo $this->fileName;exit();
//检查文件大小是否超出限制
if (!$this->checkSize()) {
$this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
return;
}
//检查是否不允许的文件格式
if (!$this->checkType()) {
$this->stateInfo = $this->getStateInfo("ERROR_TYPE_NOT_ALLOWED");
return;
}
//Move之前可以结合 validate() 对上传文件进行校验
//扩展名,TP中的校验是没有.的,Ueditor里的配置是有点的。所以这里要去掉这个点。
$valiData = [
'size' => $this->config['maxSize'], //大小
'ext' => str_replace('.', '', implode(',',$this->config['allowFiles']))
];
$pathInfo = pathinfo($this->fullName); //181203修正两行
//移动文件
$moveResult = $fileObj->validate($valiData)->move($pathInfo['dirname'],$this->fileName);
if($moveResult){
$this->fullName = $this->uploadPreFix . str_replace('\\','/',$moveResult->getSaveName());
$this->stateInfo = $this->stateMap[0];
}else{
$this->stateInfo = $fileObj->getError();
}
return;
}else{
$this->stateInfo = $this->getStateInfo('ERROR_FILE_NOT_FOUND');
return;
}
}
/**
* 处理base64编码的图片上传
* @return mixed
*/
private function upBase64()
{
$base64Data = Request()->post($this->fileField);
$img = base64_decode($base64Data);
$this->oriName = $this->config['oriName'];
$this->fileSize = strlen($img);
$this->fileType = $this->getFileExt();
$this->fullName = $this->getFullName();
$this->filePath = $this->getFilePath(); //路径,无文件名
$this->fileName = $this->getFileName();
$dirname = dirname($this->filePath);
//检查文件大小是否超出限制
if (!$this->checkSize()) {
$this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
return;
}
//创建目录失败
if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
$this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
return;
} else if (!is_writeable($dirname)) {
$this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
return;
}
//移动文件
if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移动失败
$this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT");
} else { //移动成功
//由于配置上传路径的是时候是./开头的,所以这里要把第一个点给去掉,否则URL路径出错
if(substr($this->fullName,0,2) == './'){
$this->fullName = substr($this->fullName, 1,strlen($this->fullName));
}
$this->stateInfo = $this->stateMap[0];
}
}
/**
* 拉取远程图片
* @return mixed
*/
private function saveRemote($imgUrl)
{
$imgUrl = htmlspecialchars($imgUrl);
$imgUrl = str_replace("&", "&", $imgUrl);
//echo $imgUrl;
//http开头验证
if (strpos($imgUrl, "http") !== 0) {
$this->stateInfo = $this->getStateInfo("ERROR_HTTP_LINK");
return;
}
preg_match('/(^https*:\/\/[^:\/]+)/', $imgUrl, $matches);
$host_with_protocol = count($matches) > 1 ? $matches[1] : '';
// 判断是否是合法 url
if (!filter_var($host_with_protocol, FILTER_VALIDATE_URL)) {
$this->stateInfo = $this->getStateInfo("INVALID_URL");
return;
}
preg_match('/^https*:\/\/(.+)/', $host_with_protocol, $matches);
$host_without_protocol = count($matches) > 1 ? $matches[1] : '';
// 此时提取出来的可能是 ip 也有可能是域名,先获取 ip
$ip = gethostbyname($host_without_protocol);
// 判断是否是私有 ip
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)) {
$this->stateInfo = $this->getStateInfo("INVALID_IP");
return;
}
//获取请求头并检测死链
$heads = get_headers($imgUrl, 1);
if (!(stristr($heads[0], "200") && stristr($heads[0], "OK"))) {
$this->stateInfo = $this->getStateInfo("ERROR_DEAD_LINK");
return;
}
//格式验证(扩展名验证和Content-Type验证)
$fileType = strtolower(strrchr($imgUrl, '.'));
if (!in_array($fileType, $this->config['allowFiles']) || !isset($heads['Content-Type']) || !stristr($heads['Content-Type'], "image")) {
$this->stateInfo = $this->getStateInfo("ERROR_HTTP_CONTENTTYPE");
return;
}
//打开输出缓冲区并获取远程图片
ob_start();
$context = stream_context_create(
array('http' => array(
'follow_location' => false // don't follow redirects
))
);
readfile($imgUrl, false, $context);
$img = ob_get_contents();
ob_end_clean();
preg_match("/[\/]([^\/]*)[\.]?[^\.\/]*$/", $imgUrl, $m);
$this->oriName = $m ? $m[1]:"";
$this->fileSize = strlen($img);
$this->fileType = $this->getFileExt();
$this->fullName = $this->getFullName();
$this->filePath = $this->getFilePath();
$this->fileName = $this->getFileName();
$dirname = dirname($this->filePath);
//检查文件大小是否超出限制
if (!$this->checkSize()) {
$this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
return;
}
//创建目录失败
if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
$this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
return;
} else if (!is_writeable($dirname)) {
$this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
return;
}
//移动文件
if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) {
//移动失败
$this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT");
} else {
//移动成功
if(substr($this->fullName,0,2) == './'){
$this->fullName = substr($this->fullName, 1,strlen($this->fullName));
}
$this->stateInfo = $this->stateMap[0];
}
}
/**
* 上传错误检查
* @param $errCode
* @return string
*/
private function getStateInfo($errCode)
{
return !$this->stateMap[$errCode] ? $this->stateMap["ERROR_UNKNOWN"] : $this->stateMap[$errCode];
}
/**
* 获取文件扩展名
* @return string
*/
private function getFileExt()
{
return strtolower(strrchr($this->oriName, '.'));
}
/**
* 重命名文件
* @return string
*/
private function getFullName()
{
//替换日期事件
$t = time();
$d = explode('-', date("Y-y-m-d-H-i-s"));
$format = $this->config["pathFormat"];
$format = str_replace("{yyyy}", $d[0], $format);
$format = str_replace("{yy}", $d[1], $format);
$format = str_replace("{mm}", $d[2], $format);
$format = str_replace("{dd}", $d[3], $format);
$format = str_replace("{hh}", $d[4], $format);
$format = str_replace("{ii}", $d[5], $format);
$format = str_replace("{ss}", $d[6], $format);
$format = str_replace("{time}", $t, $format);
//过滤文件名的非法字符,并替换文件名
$oriName = substr($this->oriName, 0, strrpos($this->oriName, '.'));
$oriName = preg_replace("/[\|\?\"\<\>\/\*\\\\]+/", '', $oriName);
$format = str_replace("{filename}", $oriName, $format);
//替换随机字符串
$randNum = create_randomstr(64);
if (preg_match("/\{rand\:([\d]*)\}/i", $format, $matches)) {
$format = preg_replace("/\{rand\:[\d]*\}/i", substr($randNum, 0, $matches[1]), $format);
}
$ext = $this->getFileExt();
return $format . $ext;
}
/**
* 获取文件名
* @return string
*/
private function getFileName () {
return substr($this->filePath, strrpos($this->filePath, '/') + 1);
}
/**
* 获取文件完整路径
* @return string
*/
private function getFilePath()
{
$fullname = $this->fullName;
$rootPath = $_SERVER['DOCUMENT_ROOT'];
if (substr($fullname, 0, 1) != '/') {
$fullname = '/' . $fullname;
}
return $rootPath . $fullname;
}
/**
* 文件类型检测
* @return bool
*/
private function checkType()
{
return in_array($this->getFileExt(), $this->config["allowFiles"]);
}
/**
* 文件大小检测
* @return bool
*/
private function checkSize()
{
return $this->fileSize <= ($this->config["maxSize"]);
}
/**
* 获取当前上传成功文件的各项信息
* @return array
*/
public function getFileInfo()
{
return array(
"state" => $this->stateInfo,
"url" => $this->fullName,
"title" => $this->fileName,
"original" => $this->oriName,
"type" => $this->fileType,
"size" => $this->fileSize
);
}
/**
* 远程文件转换
* @param $fielField
* @param $config
* @return array
* @auther hotlinhao
*/
public function uploadCrawler($fielField,$config){
$this->fileField = $fielField;
$this->config = $config;
$postSource = Request()->post($this->fileField . '/a');
if(is_array($postSource) && count($postSource) > 0){
$source = $postSource;
}else{
$source = Request()->get($this->fileField.'/a');
}
$list=[];
foreach ($source as $imgUrl){
$this->saveRemote($imgUrl);
$info = $this->getFileInfo();
array_push($list, [
'state' => $info['state'],
'url' => $info['url'],
'size' => $info['size'],
'title' => htmlspecialchars($info['title']),
'source' => htmlspecialchars($imgUrl)
]);
}
return [
'state' => count($list) ? 'SUCCESS' : 'ERROR',
'list' => $list
];
}
public function lists(){
}
}
将原配置文件转换为数组放到 extend/ueditor目录下,命名为 config.php ,因为上传路径在JSON文件中都是写死的,无法和后台参数等配合使用,所以这里采用动态引入的方法,然后再自行修改处理。
<?php
/* 前后端通信相关的配置,注释只允许使用多行方式 */
return [
/* 上传图片配置项 */
"imageActionName" => "uploadimage", /* 执行上传图片的action名称 */
"imageFieldName" => "upfile", /* 提交的图片表单名称 */
"imageMaxSize" => 2048000, /* 上传大小限制,单位B */
"imageAllowFiles" => [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
"imageCompressEnable" => true, /* 是否压缩图片,默认是true */
"imageCompressBorder" => 1600, /* 图片压缩最长边限制 */
"imageInsertAlign" => "none", /* 插入的图片浮动方式 */
"imageUrlPrefix" => "", /* 图片访问路径前缀 */
"imagePathFormat" => "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
/* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
/* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
/* {time} 会替换成时间戳 */
/* {yyyy} 会替换成四位年份 */
/* {yy} 会替换成两位年份 */
/* {mm} 会替换成两位月份 */
/* {dd} 会替换成两位日期 */
/* {hh} 会替换成两位小时 */
/* {ii} 会替换成两位分钟 */
/* {ss} 会替换成两位秒 */
/* 非法字符 \ : * ? " < > | */
/* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
/* 涂鸦图片上传配置项 */
"scrawlActionName" => "uploadscrawl", /* 执行上传涂鸦的action名称 */
"scrawlFieldName" => "upfile", /* 提交的图片表单名称 */
"scrawlPathFormat" => "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"scrawlMaxSize" => 2048000, /* 上传大小限制,单位B */
"scrawlUrlPrefix" => "", /* 图片访问路径前缀 */
"scrawlInsertAlign" => "none",
/* 截图工具上传 */
"snapscreenActionName" => "uploadimage", /* 执行上传截图的action名称 */
"snapscreenPathFormat" => "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"snapscreenUrlPrefix" => "", /* 图片访问路径前缀 */
"snapscreenInsertAlign" => "none", /* 插入的图片浮动方式 */
/* 抓取远程图片配置 */
"catcherLocalDomain" => ["127.0.0.1", "localhost", "img.baidu.com"],
"catcherActionName" => "catchimage", /* 执行抓取远程图片的action名称 */
"catcherFieldName" => "source", /* 提交的图片列表表单名称 */
"catcherPathFormat" => "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"catcherUrlPrefix" => "", /* 图片访问路径前缀 */
"catcherMaxSize" => 2048000, /* 上传大小限制,单位B */
"catcherAllowFiles" => [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
/* 上传视频配置 */
"videoActionName" => "uploadvideo", /* 执行上传视频的action名称 */
"videoFieldName" => "upfile", /* 提交的视频表单名称 */
"videoPathFormat" => "/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"videoUrlPrefix" => "", /* 视频访问路径前缀 */
"videoMaxSize" => 102400000, /* 上传大小限制,单位B,默认100MB */
"videoAllowFiles" => [
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
/* 上传文件配置 */
"fileActionName" => "uploadfile", /* controller里,执行上传视频的action名称 */
"fileFieldName" => "upfile", /* 提交的文件表单名称 */
"filePathFormat" => "/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"fileUrlPrefix" => "", /* 文件访问路径前缀 */
"fileMaxSize" => 51200000, /* 上传大小限制,单位B,默认50MB */
"fileAllowFiles" => [
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
], /* 上传文件格式显示 */
/* 列出指定目录下的图片 */
"imageManagerActionName" => "listimage", /* 执行图片管理的action名称 */
"imageManagerListPath" => "/ueditor/php/upload/image/", /* 指定要列出图片的目录 */
"imageManagerListSize" => 20, /* 每次列出文件数量 */
"imageManagerUrlPrefix" => "", /* 图片访问路径前缀 */
"imageManagerInsertAlign" => "none", /* 插入的图片浮动方式 */
"imageManagerAllowFiles" => [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
/* 列出指定目录下的文件 */
"fileManagerActionName" => "listfile", /* 执行文件管理的action名称 */
"fileManagerListPath" => "/ueditor/php/upload/file/", /* 指定要列出文件的目录 */
"fileManagerUrlPrefix" => "", /* 文件访问路径前缀 */
"fileManagerListSize" => 20, /* 每次列出文件数量 */
"fileManagerAllowFiles" => [
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
] /* 列出的文件类型 */
];
以上两个文件目录结果如下:
app/extend/ueditor/
./UeUpload.php
./config.php
通过上面的操作就可以完成所有的上传操作,这里没有处理截图,我把截图功能去掉了。
如果要关闭保存远程图片的功能,请在引入ueditor.confg.js文件时找到: cateRemoteImageEnable: 设置为false即可。
自动保存远程图片的功能是在复制别的网页内容时里面的域名不在配置的白名单里(config.json[我这里改成了动态的config.php])就会自动执行下载操作。然后进行替换后原来的URL。
详见: https://blog.csdn.net/asdz1989253jm/article/details/44673847
到此就完成了,不过文件列表这个没有做,有兴趣的可以参考Ueditor给的phpDemo来处理文件列表就可以了。因为我们的项目开发中要将附件写入数据库记录中,所以不是读的文件列表。