应用架在新浪的SAE上,而同时功能中又需要用上编辑器,鉴于百度的UEditor功能强大,可定制,文档全,所以理所当然的用它。而新浪把本地文件的IO操作禁止了,使得UEdiotr的图片上传、附件和在线涂鸦功能都不可用了。发布文章是不能够上传图片和附件 的,只能采用网络图片,甚至自己先将图片和附件上传到云上,然后再超链接使用,虽然也可以解决问题,但是挺不痛快的。后来随着对SAE有了更深入的了解之后,发现新浪提供了Storage来支持文件上传,下面我就利用SAE的Storage对UEditor进行简单的修改,同时不影响以后的使用。

1、首先在Storage中创建一个名为"upload"的domain;

2、找到UEditor中处理上传功能的文件上传类;

我用的UEditor版本是最新的1.2.3.0 PHP版本,在这个版本中,官方提供的PHP上传功能都统一通过调用ueditor/php/Uploader.class.php 里的Uploader来实现。打开该文件,在构造函数中我们看到upFile这个函数被调用来实现上传。注意到upFile里面的这部分代码,大概第91行至97行处:

 $this->fullName = $this->getFolder() . '/'. $this->getName();
if( $this->stateInfo == $this->stateMap[ 0 ] ) {
if(!move_uploaded_file($file[ "tmp_name"],$this->fullName)) {
$this->stateInfo = $this->getStateInfo( "MOVE");
}
}
  显然move_upload_file是不能用了,SAE提供了SaeStorage这个类来处理用户上传的文件,具体见该类文档:http://apidoc.sinaapp.com/sae/SaeStorage.html

我们把上面代码改成下面这个样子:

 $this->fullName = $this->getFolder() . '/'. $this->getName();
if( $this->stateInfo == $this->stateMap[ 0 ] ) {
if(!defined('SAE_TMP_PATH')){
if( !move_uploaded_file( $file[ "tmp_name"] , $this->fullName ) ) {
$this->stateInfo = $this->getStateInfo( "MOVE");
}
}
else{
$st=newSaeStorage();
$url=$st->upload('upload',$this->fullName, $file[ "tmp_name"]);
if(!$url){
$this->stateInfo = $this->getStateInfo( "MOVE");
}
else{
$this->fullName=$url;
}
}
}

  说 明:SAE_TMP_PATH是SAE平台上自动定义的常量,我们用它来判定是否是在SAE上(因为还要兼容其他开发环境),如果在SAE上,生成一个 SaeStorage对象,调用upload这个API,第一个参数是在SAE的Storage里创建的Domain,第二个参数是保存的文件名(可以包 含目录,如果目录不存在,Storage会自动创建),第三个参数则是文件的临时名。当图片上传成功后会返回图片的URL,我们直接 令$this->fullName=$url;这样程序就能返回图片的完整地址给UEditor了。

上面代码的第一行调用了getFolder,该方法源代码如下:

 privatefunctiongetFolder()
{
$pathStr= $this->config[ "savePath"];
if( strrchr( $pathStr, "/") != "/") {
$pathStr.= "/";
}
$pathStr.= date( "Ymd");
if( !file_exists( $pathStr) ) {
if( !mkdir( $pathStr, 0777 , true ) ) {
returnfalse;
}
}
return$pathStr;
}

如果你有了解SAE上禁用函数和类,那你自然清楚mkdir在SAE上是不能用的!没关系,Storage它会自动帮我们创建目录,要对此做下改动,代码如下所示:

 privatefunctiongetFolder()
{
$pathStr= $this->config[ "savePath"];
if( strrchr( $pathStr, "/") != "/") {
$pathStr.= "/";
}
$pathStr.= date( "Ymd");
if(!defined('SAE_TMP_PATH'))
{
if( !file_exists( $pathStr) ) {
if( !mkdir( $pathStr, 0777 , true ) ) {
returnfalse;
}
}
}
return$pathStr;
}

3、在editor_config.js中把所有的图片修正地址都改成""。

现 在我们传个图片试试,在Storage里面也能看到上传的文件,那说明文件成功上传了,但是在编辑器里面无法显示却裂了。看看链接的地址,原来 UEditor给我们的地址自动加上了图片修正地址。在editor_config.js中把所有的图片修正地址都改成"",如:

 ,imagePath:""          //图片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置
,scrawlPath:"" //图片修正地址,同imagePath
,catcherPath:"" //图片修正地址,同imagePath
,imageManagerPath:"" //图片修正地址,同imagePath

然后清除缓存,重新上传个图片,这会编辑器中也能够显示图片。

UE移植到SAE云平台的更多相关文章

  1. 新浪SAE云平台下使用codeigniter的数据库配置

    新浪SAE云平台下使用codeigniter的数据库配置 投稿:shichen2014 字体:[增加 减小] 类型:转载 这篇文章主要介绍了新浪SAE云平台下使用codeigniter的数据库配置,主 ...

  2. SAE云平台的使用

    参考文章:http://www.cnblogs.com/luyangsblog/p/3956135.html                 Web开发从零单排之一:在新浪云平台SAE上开发一个htm ...

  3. SAE云平台上传图片和发送邮件

    1.远程图片保存至Storage 其中public是Storage中的容器名,"目录1/目录2/"是容器下的路径 $file_content 是得到的文件数据 $s = new S ...

  4. 利用新浪云平台(SAE) 搭建 HUSTOJ 简易教程

    前言: OnlineJudge(OJ)是一种代码在线判定平台,这里有许多的编程题目供你选择,你可以选择题目提交代码,OJ会自动返回你的代码的判定结果.是一种很方便的编程.算法练习平台.详情可见:百度百 ...

  5. Web开发从零单排之一:在新浪云平台SAE上开发一个html5电子喜帖

    需求描述: 本人大婚将至,女朋友说“现在都流行在微信上发电子请帖了,你不是技(cheng)术(xu)宅(yuan)嘛,不会连这个都搞不定吧” 本人嘴上说这等小事何足挂齿,但心里还是七上八下的,虽然自认 ...

  6. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  7. 手把手教您将 libreoffice 移植到函数计算平台

    LibreOffice 是由文档基金会开发的自由及开放源代码的办公室套件.LibreOffice 套件包含文字处理器.电子表格.演示文稿程序.矢量图形编辑器和图表工具.数据库管理程序及创建和编辑数学公 ...

  8. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  9. ESA2GJK1DH1K基础篇: 阿里云物联网平台: 云平台显示单片机采集的温湿度数据,控制设备继电器(基于GPRS模块,AT指令TCP_MQTT通信)

    实现的功能 上一节是使用的Wi-Fi模块连接的阿里云平台,这节呢咱用GPRS连接. 阿里云的设备配置还是按照上一节的,有个温度,有个湿度. 测试 一,打开单片机程序 二,根据自己的修改,然后下载进去单 ...

随机推荐

  1. BZOJ 1968: [Ahoi2005]COMMON 约数研究

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2032  Solved: 1537[Submit] ...

  2. noip2016十连测round1

    A:String Master 题目:所谓最长公共子串,比如串 A:"abcde",串 B:"jcdkl",则它们的最长公共子串为串 "cd" ...

  3. hadoop在网页客户端的maven配置

    hadoop网页客户端maven配置,只能在tomcat7上运行,tomcat6和tomcat8运行会出错,我用的是tomcat-7.0.67 完整的pom.xml内容为: <!-- 这个配置只 ...

  4. iOS播放器 - AVPlayer

    之前有说到在播放器中一点点小技巧,现在正式记录一下AVPlayer. 这里主要是说明用AVPlayer做音乐播放器的功能实现,所以不介绍AVPlayer中那个图层类. 首先我们要声明一下播放器,这里有 ...

  5. 设计模式 “续”

    观察者模式 再次申明,本文学习自 程杰 兄的 "大话设计模式" 根据书中的内容和自己的体会而来. 观察者模式也叫 发布.订阅模式,在这个模式里,一个目标物件管理所有依赖它的观察者物 ...

  6. 69个经典Spring面试题和答案

    Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业级应用开发,并通过PO ...

  7. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇

    原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...

  8. php函数fgets读取文件

    如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(true); $file_name = "a.t ...

  9. PHP通用分页(Pager)类

    三种不同展示方式 附上style~ 1. 效果图1 2.效果图2    3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * show(2) 1 ... 62 63 6 ...

  10. 如何对Azure磁盘性能进行测试

    Azure的云存储一直是Azure比较自豪的东西,想到AWS的LSA后面有若干个9,搞得大家都以为它的存储最优秀,其实不然,Azure存储到现在没有丢过客户1bit的数据,但是Azure不会去说我们的 ...