Struts2 urlrewrite + kindeditor 上传图片时request为null问题
2014-04-02 15:40
507 查看
采用struts2 加上了 urlrewrite 后 web.xml 里面配置变成了这样
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<!-- 重新必须加的 -->
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<!-- <dispatcher>INCLUDE </dispatcher> -->
</filter-mapping>
但是问题就来了 url 重写 是实现了 但是 /* 是不能完成kindeditor 当中的upload_json.jsp上传的
upload_json.jsp 的上传 是需要 *.action
怎么解决呢 办法来了
重写一个jsp用作上传
如下:
<%@ 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>");
%>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<!-- 重新必须加的 -->
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<!-- <dispatcher>INCLUDE </dispatcher> -->
</filter-mapping>
但是问题就来了 url 重写 是实现了 但是 /* 是不能完成kindeditor 当中的upload_json.jsp上传的
upload_json.jsp 的上传 是需要 *.action
怎么解决呢 办法来了
重写一个jsp用作上传
如下:
<%@ 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>");
%>
相关文章推荐
- kindeditor和struts2结合后富文本中上传图片不成功的问题
- kindeditor图片上传后url不带域名问题终极解决方案
- struts2 2.3.32升级到2.5.13,kindeditor图片上传问题
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片失败 parserequest为null
- 异常-----springmvc + ajaxfileupload解决ajax不能异步上传图片的问题。java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.
- 转:struts2 FCKeditor不能上传图片的问题解决
- 关于在线编辑器Kindeditor上传图片报错的问题:没有权限
- Struts2使用UrlRewriteFilter实现URL重写遇到的问题
- KindEditor4 struts2 jsp 本地图片或文件上传
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
- mvc 解决StyleBundle中 图片绝对路径 装换成相对路径的问题 CssRewriteUrlTransform
- 解决kindeditor与Struts2框架整合时无法上传本地图片的问题
- 学习淘淘商城第二十一课(解决KindEditor上传图片不兼容的问题)
- kindeditor上传本地图片的问题
- kindEditor上传图片错误,不成功的问题总结
- AFN上传图片文件 遇到 NSURL中fileURLWithPath和URLWithString 的区别的问题
- kindeditor与Struts2框架整合时无法上传本地图片的问题讲解
- 解决Struts2中CKFinder上传图片等文件后没有响应(服务器上也没有)问题--某特殊情况
- iOS NSMutableURLRequest 上传图片
- Spring mvc 上传图片遇到The current request is not a multipart request的问题