移植之前,我们首先要在Storage中创建一个Domain,这里我创建的是upload
我用的是ueditor 1.2.5.1_php_utf8
1.修改Uploader.class.php
ueditor提供的上传功能都是通过Uploader.class.php(ueditor/php/文件夹下)来实现的,我们需要把92行到97行改一下。
这里的move_uploaded_file显然是不行的,我们需要使用SaeStorage的upload方法。修改后的代码是这样的:
// SAE环境修改开始
if ( $this->stateInfo == $this->stateMap[ 0 ] ) {
if(!defined('SAE_TMP_PATH')){
// 非SAE环境中
if ( !move_uploaded_file( $file[ "tmp_name" ] , $this->fullName ) ) {
$this->stateInfo = $this->getStateInfo( "MOVE" );
}
}else{
// SAE环境中
$st=new SaeStorage();
$url=$st->upload('upload',$this->fullName, $file[ "tmp_name" ]);
if(!$url){
$this->stateInfo = $this->getStateInfo( "MOVE" );
}else{
$this->fullName=$url;
}
}
}
// SAE环境修改结束我这里多做了一个判断,就是通过判断是否存在SAE平台的常量SAE_TMP_PATH来判断当前环境是否SAE,如果是,则执行SAE上的代码,如果不是,则执行普通环境的代码,这样就兼容了SAE和普通环境。要是你使用的是ThinkPHP的话,这样做之后,你的代码就完全可以再两个环境中运行了。有关SaeStorage的说明,请看SAE的文档。后面的也是这样,我就不做过多说明了。下面我们还要修改getFolder()方法。先把修改后的代码贴上,相信大家一看就明白。
private function getFolder()
{
$pathStr = $this->config[ "savePath" ];
if ( strrchr( $pathStr , "/" ) != "/" ) {
$pathStr .= "/";
}
$pathStr .= date( "Ymd" );
// 增加判断SAE环境,以兼容普通环境
if(!defined('SAE_TMP_PATH')){
if ( !file_exists( $pathStr ) ) {
if ( !mkdir( $pathStr , 0777 , true ) ) {
return false;
}
}
}
return $pathStr;
}这里我们屏蔽了新建目录这部,Storage会自动创建。现在上传试试,是不是文件可以上传成功了,而且Storage中也能看到上传的文件,但编辑器里图片却无法显示,看下源码,发现问题了吧:ueditor给自动加上了修正地址。
2.修改editor_config.js
在SAE中,我们需要把editor_config.js中的7处(分别在38、45、49、54、61、66、72行)修正路径修改为空(”),注意前面的URL,要改成,imagePath:”"而不是,imagePath:URL+”"!至此,编辑器里的图片、附件路径正常了,提交后也能正常显示。
3.修改imageManager.php
经过前面的修改,你还会发现,图片管理还是用不了,我们还要把imageManager.php修改一下。
定位到16行这个if语句:
if ( $action == "get" ) {这里是通过遍历的本地目录列表的方式来实现,在SAE上我们需要通过SaeStorage的getList方法来实现。代码很简单,修改后是这样的:if ( $action == "get" ) {
if(!defined('SAE_TMP_PATH')){
// 普通环境下
$files = array();
foreach ( $paths as $path){
$tmp = getfiles( $path );
if($tmp){
$files = array_merge($files,$tmp);
}
}
if ( !count($files) ) return;
rsort($files,SORT_STRING);
$str = "";
foreach ( $files as $file ) {
$str .= $file . "ue_separate_ue";
}
echo $str;
}else{
// SAE环境下
$st=new SaeStorage(); // 实例化
/*
* getList:获取指定domain下的文件名列表
* return: 执行成功时返回文件列表数组,否则返回false
* 参数:存储域,路径前缀,返回条数,起始条数
*/
$num=0;
while($ret = $st->getList("upload", NULL, 100, $num )){
foreach($ret as $file) {
if ( preg_match( "/\.(gif|jpeg|jpg|png|bmp)$/i" , $file ) )
echo $st->getUrl('upload',$file). "ue_separate_ue";
$num++;
}
}
}
}保存,测试,图片管理可以用了吧!此外还有在线涂鸦、远程图片抓取等功能也需要移植,我这里没有用到,暂时也就没有搞,但思路和方法就是这样,有兴趣的朋友可以搞一搞。SaeStorage的说明在SAE官网上都有,我还是发个地址给大家http://apidoc.sinaapp.com/sae/SaeStorage.html
我这里基本移植好的ueditor也放出来,和大家分享。我根据我的需要定制过的UEditor1.2.5.1版本,如果需要的功能没有,可以到ueditor官网http://ueditor.baidu.com/下载完整版,然后根据上面说的自己移植。
你可以到我的百度网盘http://pan.baidu.com/share/li
最佳答案