ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
博客专区 > Jialy 的博客 > 博客详情
ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
Jialy 发表于4年前
ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
  • 发表于 4年前
  • 阅读 18998
  • 收藏 8
  • 点赞 6
  • 评论 16

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案

在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置好了上传路径信息,也会出现"未找到上传文件"的错误提示,出先该问题的原因是:在配置struts过滤器,过滤路径设置/*方式时,由于struts2框架默认使用apache的Commons FileUpload组件和内建的FileUploadInterceptor拦截器实现上传,会将request文件域封装到action中一个File类型的属性中,并删除request中的文件域,因此会上传文件失败。

在这里先说下ueditor1.3.6 jsp版文件上传的相关配置。

Ueditor的目录结构

首页我们要在ueditor.config.js文件中配置ueditor的基本相对路径


接下来看看图片上传的配置

我们可以看出图片上传是通过ueditor根目录下jsp目录下的imageUp.jap完成的。savePath为文件保存目录列表

会在下图中用到

对应的会在jsp目录下创建upload目录用于保存上传的图片

最后我们打开imageUp.jsp页面,会看到该页面用到Uploader.java类,所以我们需要类路径下创建一个ueditor包并将Uploader.java类拷贝进去



完成以上配置,当我们上传文件时,就会出现“未找到上传文件”的提示。

解决方案:

1.更改struts配置/*为*.xx的方式。(由于项目原因,该方式本人未亲试,若有读者实验过,请留言告知,谢谢

2.自己写一个action代替原有的imageUp.jsp页面(貌似该方案比较麻烦

3.自己定义一个struts过滤器,指定不对ueditor/jsp/目录下的jsp页面进行过滤。(该方案相对上一种就比较简单

过滤器代码如下:

package com.jl.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;

public class MyStrutsFilter extends StrutsPrepareAndExecuteFilter{
	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		String url = request.getRequestURI();         
		System.out.println(url);         
		if (url.contains("/meeting/ueditor/jsp/")) {             
			System.out.println("使用自定义过滤器");             
			chain.doFilter(req, res);         
		}else{             
			System.out.println("使用默认过滤器");             
			super.doFilter(req, res, chain);         
		} 
	}
}



修改struts配置如下:
<!-- 配置struts过滤器 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>com.jl.filter.MyStrutsFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>



到此重启项目,再进行上传操作就不会再出错了哦!^_^

最后,希望大家转载请注明出处,尊重别人的劳动成果http://my.oschina.net/jiangli0502/blog/210263



参考资料:http://www.010cnc.net/subject/about/UEditor%20與Struts2%20結合下傳有關問題解決.html

共有 人打赏支持
粉丝 22
博文 30
码字总数 18127
评论 (16)
五杀联盟
赞!解决了大问题!!!
五杀联盟
博主大神!
Jialy

引用来自“唐阳”的评论

博主大神!

谬赞了,菜鸟一只。

火龙战士
在楼主基础下,成功实现咯~ 大赞
炎南鹰
大赞楼主
彭浩it
碰巧解决了问题吧
Jialy

引用来自“彭浩it”的评论

碰巧解决了问题吧
No,如果用的kindeditor,一样可以这样解决。
Yung.breather
博主牛人,拜服中
SSAAA
感觉楼主分享,困惑了很久的问题,终于解决了。
我现在用的是1.4.3 jsp版的,用解决方案三可以解决。
周天子z

引用来自“枫亭”的评论

感觉楼主分享,困惑了很久的问题,终于解决了。
我现在用的是1.4.3 jsp版的,用解决方案三可以解决。
1.4.3 jsp版和之前的有很多不同,怎么解决的啊?我试了不行,用ssh框架的
wms1
文件上传其实和框架没有很大关系,重点是request不要被不相关的框架处理,建议使用servlet3.1规范,实现一两行代码解决上传问题。spring mvc文件上传处理也很简单
genericyzh
楼主的意思是吧web.xml中原来的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter覆盖掉?如果这样设置,那么其他页面有一个form上传一个文件,也上传不了了吧
FreakCiao
本身用的就是*action方式,还是出现了这种问题
FreakCiao
IO错误有人遇到过么.... 怎么解决
Jialy

引用来自“FreakCiao”的评论

本身用的就是*action方式,还是出现了这种问题
那可能方案1不行吧,重点是struts拦截器清空了request中文件域
吴悠1977
解决方案一可以通过
×
Jialy
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: