struts2 + kindeditor 报服务器发生故障
1. 使用firefox的firebug调试发现路径没有问题,官网的案例讲的也比较明白。排除这些错误。
2. debug发现parseRequest方法异常,一查发现是struts2的原因,struts2将request封装成org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper 了。
解决方案:
1. 将web.xml 中?struts过滤器改成如下:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
?</filter-mapping>
2. 重写上传文件部分
<%@?page?language="java"?pageEncoding="GBK"%>?
<%@page?
import="java.util.*,java.io.*,?
org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper,?
java.util.concurrent.locks.*"%>?
<%?
//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("/")?
+?"ke_upload\\"?+?newName);?
//设置?KE?中的图片文件地址?
String?newFileName?=?request.getScheme()?+?"://"?
+?request.getServerName()?+?":"?+?request.getServerPort()?
+?request.getContextPath()?+?"/ke_upload/"?+?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?
out.println("<html><head><title>Insert?Image</title><meta?http-equiv='content-type'?content='text/html;?charset=gbk'/></head><body>");?
out.println("<script?type='text/javascript'>");?
out.println("parent.parent.KE.plugin['image'].insert('"?
+?wrapper.getParameter("id")?+?"','"?+?newFileName?+?"','"?
+?wrapper.getParameter("imgTitle")?+?"','"?
+?wrapper.getParameter("imgWidth")?+?"','"?
+?wrapper.getParameter("imgHeight")?+?"','"?
+?wrapper.getParameter("imgBorder")?+?"','"?
+?wrapper.getParameter("align")?+?"');</script>");?
out.println("</body></html>");?
%>?
?参考:
http://commons.apache.org/fileupload/faq.html#howto-parse-in-action
http://www.iteye.com/topic/599971
http://topic.csdn.net/u/20090514/10/ba62c761-e591-4c9e-859a-87907634ea13.html