一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
这里记录下 百度ueditorPHP版本编辑器将图片上传到非项目根路径
通俗点解释就是:
UEditor 的页面在 a.com 下,serverUrl指向域名在 b.com 域下
这个官方文档是有介绍的:跨域上传,这个我就不废话了。
下边是链接:
http://fex.baidu.com/ueditor/#dev-crossdomain
说实话,我没看懂……主要是麻烦(我懒)
我就想,我先把图片传到A下,成功之后,再将A下的图片剪切到B下。
然后再将config.php下的imageUrlPrefix(图片访问路径前缀)修改成B的域名。
这应该是可行的吧。
嗯,实践出真知。开始我漫长的调试之路
最开始,尝试了一下move_upload_file() 函数。
结果,报错。
百度了一下 move_upload_file() 函数作用的是 HTTP POST 上传的图片。
又百度了一下。Php把一个文件复制剪切到另一个文件夹的函数还有
copy() rename()
这两个试了一下,但是有点麻烦。copy复制成功之后,还需要删除源文件。
Emmmmm……这可如何是好。
这个时候,我想到了万能的linux命令。
mv /www/1.txt /aaa/ 将www目录下的1.txt文件移动到aaa目录下
不多废话了,上代码
<?php
//header('Access-Control-Allow-Origin: http://www.baidu.com'); //设置http://www.baidu.com允许跨域访问
//header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With'); //设置允许的跨域header
date_default_timezone_set("Asia/Chongqing");
error_reporting(E_ERROR);
header("Content-Type: text/html; charset=utf-8");
header("Access-Control-Allow-Origin");
$CONFIG = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents("config.json")), true);
$action = $_GET['action'];
switch ($action) {
case 'config':
$result = json_encode($CONFIG);
break;
/* 上传图片 */
case 'uploadimage':
/* 上传涂鸦 */
case 'uploadscrawl':
/* 上传视频 */
case 'uploadvideo':
/* 上传文件 */
case 'uploadfile':
$result = include("action_upload.php");
break;
/* 列出图片 */
case 'listimage':
$result = include("action_list.php");
break;
/* 列出文件 */
case 'listfile':
$result = include("action_list.php");
break;
/* 抓取远程文件 */
case 'catchimage':
$result = include("action_crawler.php");
break;
default:
$result = json_encode(array(
'state'=> '请求地址出错'
));
break;
}
//********************************* 移动图片start ************************************
$date = date("Ymd",time());
$dir = "/var/www/html/aaa/public/ueditor/".$date;//目标文件夹(如果不存在,就创建)
if(!is_dir($dir)){
mkdir($dir);
}
$a = json_decode($result,true);//对上传成功之后的结果进行解析(如果图片上传成功)
if($a['url'] != null && $a['url'] != ''){
$url = "/var/www/html/bbb/public".$a['url'];//这是上传图片路径
$new_url = $dir.'/';//这是剪切目标路径
$linux = "mv ".$url.' '.$new_url;//拼接linux命令
exec($linux);//执行命令
$a['url'] = '/ueditor/'.$date.'/'.$a['title'];//给解析的结果集重新赋值
$result = json_encode($a);//再将其转成json串,输出到前台
}
//********************************* 移动图片end ************************************
/* 输出结果 */
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;
}
我后添加的代码都有对应的注释。将上边的路径换成你自己的应该就好用了。
注意:json_decode() 括号内需要 添加一个true,不然会报错。
有好的建议,请在下方输入你的评论
欢迎访问个人博客 guanchao.site