JavaWeb集成百度UMEditor简易富文本编辑器

dinux 2016-01-19

JavaWeb集成百度UMEditor简易富文本编辑器

1.下载UMEditor

地址:http://ueditor.baidu.com/website/download.html#mini

选择Jsp,UTF-8版本

2.解压

解压文件,把解压完成 的文件夹改名为 ‘ueditor‘,

3.部署

把ueditor文件夹拷贝到WebRoot下,把jsp文件夹下自带的jar包:ueditor-mini.jar,commons-fileupload-1.2.2.jar,复制到WebRoot->WEB-INF->lib文件夹下

4.使用

在jsp中引入UEditor的js和css

   <link href='ueditor/themes/default/css/umeditor.css' type="text/css" rel="stylesheet" >  

  <script type="text/javascript" src="ueditor/jquery.js"></script>  

  <script type="text/javascript" src="ueditor/umeditor.js"></script>    

  <script type="text/javascript" src="ueditor/umeditor.config.js"></script>    

  <script type="text/javascript" src="ueditor/lang/zh-cn/zh-cn.js"></script>

页面中使用方法:

    <textarea id="myEditor" style="width: 100%;height: 500px;"></textarea>
    <script type="text/javascript">
    //实例化UEditor
    var ue = UM.getEditor('myEditor');
    </script>

5.设置和读取编辑器的内容

var stem = UM.getEditor('myEditor').getContent();

UM.getEditor('myEditor').setContent($( "#myEditorValue" ).val());

6.上传图片的问题

由于有些Struts对页面提交的参数进行了拦截,所以需要在struts.xml中加入

<constant name="struts.action.excludePattern" value="/.*" />

7.附上图片上传Java类

Uploader.java

import java.io.*;

import java.text.SimpleDateFormat;

import java.util.*;

import org.apache.commons.fileupload.*;

import org.apache.commons.fileupload.FileUploadBase.InvalidContentTypeException;

import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;

import org.apache.commons.fileupload.util.*;

import org.apache.commons.fileupload.servlet.*;

import org.apache.commons.fileupload.FileItemIterator;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import sun.misc.BASE64Decoder;

import javax.servlet.http.HttpServletRequest;

/**

 * UEditor文件上传辅助类

 *

 */

public class Uploader {

// 输出文件地址

private String url = "";

// 上传文件名

private String fileName = "";

// 状态

private String state = "";

// 文件类型

private String type = "";

// 原始文件名

private String originalName = "";

// 文件大小

private long size = 0;

private HttpServletRequest request = null;

private String title = "";

// 保存路径

private String savePath = "upload";

// 文件允许格式

private String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf",".txt", ".swf", ".wmv", ".gif", ".png", ".jpg", ".jpeg", ".bmp" };

// 文件大小限制,单位KB

private int maxSize = 10000;

private HashMap<String, String> errorInfo = new HashMap<String, String>();

public Uploader(HttpServletRequest request) {

this.request = request;

HashMap<String, String> tmp = this.errorInfo;

tmp.put("SUCCESS", "SUCCESS"); //默认成功

tmp.put("NOFILE", "未包含文件上传域");

tmp.put("TYPE", "不允许的文件格式");

tmp.put("SIZE", "文件大小超出限制");

tmp.put("ENTYPE", "请求类型ENTYPE错误");

tmp.put("REQUEST", "上传请求异常");

tmp.put("IO", "IO异常");

tmp.put("DIR", "目录创建失败");

tmp.put("UNKNOWN", "未知错误");

}

public void upload() throws Exception {

boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);

if (!isMultipart) {

this.state = this.errorInfo.get("NOFILE");

return;

}

DiskFileItemFactory dff = new DiskFileItemFactory();

String savePath = this.getFolder(this.savePath);

dff.setRepository(new File(savePath));

try {

ServletFileUpload sfu = new ServletFileUpload(dff);

sfu.setSizeMax(this.maxSize * 1024);

sfu.setHeaderEncoding("utf-8");

HttpServletRequest httpRequest=(HttpServletRequest)request;

FileItemIterator fii = sfu.getItemIterator(httpRequest);

while (fii.hasNext()) {

FileItemStream fis = fii.next();

if (!fis.isFormField()) {

this.originalName = fis.getName().substring(fis.getName().lastIndexOf(System.getProperty("file.separator")) + 1);

if (!this.checkFileType(this.originalName)) {

this.state = this.errorInfo.get("TYPE");

continue;

}

this.fileName = this.getName(this.originalName);

this.type = this.getFileExt(this.fileName);

this.url = savePath + "/" + this.fileName;

BufferedInputStream in = new BufferedInputStream(fis.openStream());

File file = new File(this.getPhysicalPath(this.url));

FileOutputStream out = new FileOutputStream( file );

BufferedOutputStream output = new BufferedOutputStream(out);

Streams.copy(in, output, true);

this.state=this.errorInfo.get("SUCCESS");

this.size = file.length();

//UE中只会处理单张上传,完成后即退出

break;

} else {

String fname = fis.getFieldName();

//只处理title,其余表单请自行处理

if(!fname.equals("pictitle")){

continue;

}

                    BufferedInputStream in = new BufferedInputStream(fis.openStream());

                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));

                    StringBuffer result = new StringBuffer();  

                    while (reader.ready()) {  

                        result.append((char)reader.read());  

                    }

                    this.title = new String(result.toString().getBytes(),"utf-8");

                    reader.close();  

                    

}

}

} catch (SizeLimitExceededException e) {

this.state = this.errorInfo.get("SIZE");

} catch (InvalidContentTypeException e) {

this.state = this.errorInfo.get("ENTYPE");

} catch (FileUploadException e) {

this.state = this.errorInfo.get("REQUEST");

} catch (Exception e) {

this.state = this.errorInfo.get("UNKNOWN");

}

}

/**

* 接受并保存以base64格式上传的文件

* @param fieldName

*/

public void uploadBase64(String fieldName){

String savePath = this.getFolder(this.savePath);

String base64Data = this.request.getParameter(fieldName);

this.fileName = this.getName("test.png");

this.url = savePath + "/" + this.fileName;

BASE64Decoder decoder = new BASE64Decoder();

try {

File outFile = new File(this.getPhysicalPath(this.url));

OutputStream ro = new FileOutputStream(outFile);

byte[] b = decoder.decodeBuffer(base64Data);

for (int i = 0; i < b.length; ++i) {

if (b[i] < 0) {

b[i] += 256;

}

}

ro.write(b);

ro.flush();

ro.close();

this.state=this.errorInfo.get("SUCCESS");

} catch (Exception e) {

this.state = this.errorInfo.get("IO");

}

}

/**

* 文件类型判断

* @param fileName

* @return

*/

private boolean checkFileType(String fileName) {

Iterator<String> type = Arrays.asList(this.allowFiles).iterator();

while (type.hasNext()) {

String ext = type.next();

if (fileName.toLowerCase().endsWith(ext)) {

return true;

}

}

return false;

}

/**

* 获取文件扩展名

* @return string

*/

private String getFileExt(String fileName) {

return fileName.substring(fileName.lastIndexOf("."));

}

/**

* 依据原始文件名生成新文件名

* @return

*/

private String getName(String fileName) {

Random random = new Random();

return this.fileName = "" + random.nextInt(10000)

+ System.currentTimeMillis() + this.getFileExt(fileName);

}

/**

* 根据字符串创建本地目录 并按照日期建立子目录返回

* @param path 

* @return 

*/

private String getFolder(String path) {

SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd");

path += "/" + formater.format(new Date());

File dir = new File(this.getPhysicalPath(path));

if (!dir.exists()) {

try {

dir.mkdirs();

} catch (Exception e) {

this.state = this.errorInfo.get("DIR");

return "";

}

}

return path;

}

/**

* 根据传入的虚拟路径获取物理路径

* @param path

* @return

*/

private String getPhysicalPath(String path) {

String servletPath = this.request.getServletPath();

String realPath = this.request.getSession().getServletContext()

.getRealPath(servletPath);

return new File(realPath).getParent() +"/" +path;

}

public void setSavePath(String savePath) {

this.savePath = savePath;

}

public void setAllowFiles(String[] allowFiles) {

this.allowFiles = allowFiles;

}

public void setMaxSize(int size) {

this.maxSize = size;

}

public long getSize() {

return this.size;

}

public String getUrl() {

return this.url;

}

public String getFileName() {

return this.fileName;

}

public String getState() {

return this.state;

}

public String getTitle() {

return this.title;

}

public String getType() {

return this.type;

}

public String getOriginalName() {

return this.originalName;

}

}