解决kindeditor与Struts2框架整合时无法上传本地图片的问题 (1)

 
        经过两天的折磨,又源代码,又官网学习,又网络搜索的,终于成功的嵌入KindEditor了。
KindEditor确实是个不错的富文本编辑器,纯JS,比起JQuery写的,夸浏览器更佳。
所以在多种富文本编辑器中,死死认定了KE就是我要的~~

网站里有相应的DEMO以及解说

          KE除了图片上传(个人浅见),其他功能并不会涉及到框架问题。

2、图片上传改动:
将KE嵌入项目之后,找到进入plugins -- image ,打开image.html
 
A、找到   var imageUploadJson = (typeof KE.g[id].imageUploadJson == 'undefined') ? ' ../../php/upload_json.php ' :     KE.g[id].imageUploadJson;  KE默认是用PHP来处理图片上传的,所以改成自己的(如:upload_json.jsp)。
路径要注意咯~~

之后就开始写(upload_json.jsp)自己的处理过程了。
因为KE图片上传功能是通过Ajax实现的,所以,对JSONObject这些jar包是免不了的。下载的KE包里有json_simple-1.1.jar。省了功夫去找。


B、只要 对下载下来的JSP(版) 上传文件demo文件里的  upload_json.jsp  进行 文件存储路径的修改 就可以轻易搞定,完全不需要自己去动工。


不过如果是用SSH框架,而Struts2 web.xml 配置的Struts过滤器如下的话:
 
      也就是对所有的访问请求进行过滤,那么通常会在使用KE上传本地图片时会报  “服务器发生故障”之类的错误。
Struts2 对 所有 enctype="multipart/form-data"(上传文件用的表单数据类型) 的表单的request进行了封装。打包成MultiPartRequestWrapper 。这就导致拿不到原本的request了。
有个 简单的方法是将 url-pattern 标签里的内容改成其他的,如:*.action 。在路径以及其他的小问题都有注意修改的情况下,这样就可以上传图片成功了,并且可以在textarea里看到图片。

      不过,又会有其他的问题产生,比如,你的网页经常性用到 struts-tag 标签,那么可能就会 报 404 或者 500 的错误,因为普通jsp网页在没有调用action时,使用struts标签会访问不到元素。
又一个纠结(悲剧,项目做到后面才去玩KE,所以,还是不改动url了)~~ 自己写action处理上传吧,也不怎么奏效。

查了查资料,其实,这是struts带给我们的方便。在不改动<url-pattern>/*</ url-pattern>的情况下 重写upload_json.jsp

3、代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper"%>
<%@page import="java.util.concurrent.locks.*" %>
<%@page import="java.io.*" %>
<%@ page import="org.json.simple.*" %>

<%
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)request;
//获得上传的文件名
String fileName = wrapper.getFileNames("imgFile")[0];
//获得未见过滤器
File file = wrapper.getFiles("imgFile")[0];
//----------重新构建上传文件名---------
final Lock lock = new ReentrantLock();
String newName = null;
lock.lock();
try{
//加锁为防止文件名重复
newName = System.currentTimeMillis()
  +fileName.substring(fileName.lastIndexOf("."),
  fileName.length());
}finally{
lock.unlock();
}
//------锁结束---------
//获取文件输出流
FileOutputStream fos = new FileOutputStream(request.getSession()
.getServletContext().getRealPath("/")
+"team/" + newName);
//设置 KE 中的图片文件地址
String newFileName = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/team/" + newName;
byte[] buffer = new byte[1024];
//获取内存中当前文件输入流
InputStream in = new FileInputStream(file);
try{
int num = 0;
while((num = in.read(buffer)) > 0){
fos.write(buffer,0,num);
}
}catch(Exception e){
e.printStackTrace(System.err);
}finally{
in.close();
fos.close();
}
//发送给 KE 

JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", newFileName);
out.println(obj.toJSONString());
%>
# KindEditor 变更记录# ver 3.4.3 * BUG: 修改了重复编辑超级链接每次都添加&的问题。 * BUG: 修改了在IE上右键菜单没有复制、剪切项目的问题。 * BUG: 修改了在IE上没有格式化<font color=#000>代码的问题。 * BUG: 修改了PHP上传程序日期格式不正确的问题。 * BUG: 修改了在IE上代码模式下全屏本地URL自动变成绝对URL的问题。 * BUG: 修改了在代码模式下KE.util.setFullHtml函数不显示HTML内容的问题。 * 改善: 弹出框未指定任何按钮(yesButton, noButton, previewButton),不显示底部DIV。 ver 3.4.2 (2010-04-04) * 增加: 添加了KE.util.isEmpty函数,用于判断编辑器是否有可见内容。 * 改善: 页面很小弹出菜单的上下位置不变。 * 改善: 插入超级链接未选中内容插入URL文本。 * 改善: 插入超级链接的打开类型为当前窗口删除A标签的target属性。 * BUG: 修改了在IE上HTML属性值里输入JS代码格式出现错误的问题。 * BUG: 修改了cssPath属性为空加载首页的问题。 * BUG: 修改了当浏览器出现滚动条并拖动调整大小控制不住的问题。 * BUG: 修改了embed代码丢失自定义属性的问题。 * BUG: 修改了在IE上切换到代码模式后点击图标触发onbeforeunload事件的问题。 * BUG: 修改了在Firefox上光标在图片旁边点击鼠标右键,弹出右键菜单的问题。 * BUG: 修改了在Firefox上无法修改/删除图片的超级链接的问题。 * BUG: 修改了在Webkit上有无法添加/修改/删除图片的超级链接的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值