UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具备轻量,可定制,注重用户体验等特色,开源基于MIT协议,容许自由使用和修改代码。咱们在作网站文字编辑的时候会常常用到它。可是ueditor默认支持保存图片在网站的根目录下面。可是,对于网站来讲,咱们大多数的时候都要把静态资源保存到另外的服务器上,与应用服务器分开,以增长网站的性能php
下面介绍一下这个方法:前端
一,java
ueditor 1.4.2+ 推荐使用惟一的请求地址,经过GET参数action指定不一样请求类型。 但不少用户都但愿使用本身写好的上传地址,下面提供一种解决方法: 因为全部ueditor请求都经过editor对象的getActionUrl方法获取请求地址,能够直接经过复写这个方法实现,把这段js单独写到一个js中,加入的网页,而且在放在引用uditor的js以后。例子以下:web
UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
UE.Editor.prototype.getActionUrl = function(action) {
if (action == 'uploadimage' || action == 'uploadscrawl' || action == 'uploadimage') {
return 'http://a.b.com/upload.php';
} else if (action == 'uploadvideo') {
return 'http://a.b.com/video.php';
} else {
return this._bkGetActionUrl.call(this, action);
}
}
action类型以及说明
uploadimage://执行上传图片或截图的action名称
uploadscrawl://执行上传涂鸦的action名称
uploadvideo://执行上传视频的action名称
uploadfile://controller里,执行上传视频的action名称
catchimage://执行抓取远程图片的action名称
listimage://执行列出图片的action名称
listfile://执行列出文件的action名称ajax
把上面的返回地址换成本身的controller地址或跨域地址就能够了
二,定义返回值的格式
因为ueditor是使用ajax的请求的,因此返回的格式是一个json串。格式以下:
{
"state": "SUCCESS",
"url": "upload/demo.jpg",
"title": "demo.jpg",
"original": "demo.jpg",
"type":".jpg",
"size" :"1024"
}
其中type是图片的类型;size是图片的大小,url就是图片插入到ueditor中的图片可访问的地址
咱们还有另一种方式知道返回的格式,就是在ueditor默认的配置状况下,看一下上传图片后成功的返回值格式就能够了。在浏览器上按下f12,点network->response
三,图片中文名返回乱码的解决方案
当图片的名字是中文的时候,返回的结果中中文倒是乱码,好比:???;就算是配置了全部的编码是utf8以后也不能够。这是由于在显示的时候ueditor是按unicode方式显示的。这个时候咱们须要把返回结果的json串转成unicode格式,以下:
(1) 接收图片的controller:
[java] view plain copy
package com.gametech.controller; spring
import java.io.File;
import java.io.IOException;
import java.util.Iterator; json
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 跨域
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver; 浏览器
import com.alibaba.fastjson.JSON;
import com.gametech.entity.ReturnUpLoadImage;
import com.gametech.utils.StringUtils; 服务器
@Controller
@RequestMapping("upload")
public class UploadController {
/**
@return
*/
@RequestMapping("upImage")
@ResponseBody
public String upImage(HttpServletRequest request, HttpServletResponse response) {
// 建立一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
String[] filenames = null;
// 判断 request 是否有文件上传,即多部分请求
//{"state": "SUCCESS","title": "1437299650668072896.jpg","original": "rdn_508f4a9624572.jpg","type": ".jpg","url": "/ueditor/upload/image/20150719/1437299650668072896.jpg","size": "14262"}
ReturnUpLoadImage upLoadImage = new ReturnUpLoadImage(); upLoadImage.setUrl("upload/1.jpg"); if (multipartResolver.isMultipart(request)) { // 转换成多部分request //MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);
[java] view plain copy
<span style="white-space:pre"> </span>MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
filenames = new String[multiRequest.getFileMap().size()];
// 取得request中的全部文件名
Iterator<String> iter = multiRequest.getFileNames();
int i = 0;
while (iter.hasNext()) {
// 记录上传过程起始时的时间,用来计算上传时间
int pre = (int) System.currentTimeMillis();
// 取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if (file != null) {
// 取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
upLoadImage.setOriginal(myFileName);
// 若是名称不为“”,说明该文件存在,不然说明该文件不存在
if (myFileName.trim() != "") {
System.out.println(myFileName);
// 重命名上传后的文件名
String fileName = "demoUpload" + file.getOriginalFilename();
upLoadImage.setTitle(fileName);
filenames[i] = fileName;
i++;
// 定义上传路径
String path = "E:/" + fileName;
File localFile = new File(path);
try {
file.transferTo(localFile);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 记录上传该文件后的时间
int finaltime = (int) System.currentTimeMillis();
System.out.println(finaltime - pre);
}
} upLoadImage.setType(".jpg"); upLoadImage.setSize("1024"); String result = JSON.toJSONString(upLoadImage); result = StringUtils.chinaToUnicode(result); return result; //return "{\"state\": \"SUCCESS\",\"title\": \"1437300241099035569.jpg\",\"original\": \"QQ\u622a\u56fe20150327230133.jpg\",\"type\": \".jpg\",\"url\": \"/ueditor/upload/image/20150719/1437300241099035569.jpg\",\"size\": \"463908\"}";
}
}
(2) 中文转unicode方法
[java] view plain copy
/**
转载自 :http://blog.csdn.net/youxijishu/article/details/46958515