struts2和fck冲突造成无法上传图片或文件问题解决办法
fck 在 struts2上不能上传文件的问题,struts2和fck冲突造成无法上传图片或文件,
原因是struts在web.xml中配制的过滤器把fck的servlet请求转发了。
解决办法是自实现一个过滤器ExtendStrutsFilter,继承struts2默认的过滤器StrutsPrepareAndExecuteFilter
用这个类替换掉web.xml中的struts过滤器类StrutsPrepareAndExecuteFilter就可以了
源码如下:
package com.sinowell.fckeditor;
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;
/**
* @author Rain
* 这个类用来解决struts2和fck冲突造成无法上传图片或文件 的问题,原
* 因是struts在web.xml中配制的过滤器把fck的servlet请求转发了。
* 用这个类替换掉web.xml中的struts过滤器类StrutsPrepareAndExecuteFilter就可以了
*/
public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
//不过滤的url,可以不断添加,如fck可用/fckeditor/editor/filemanager/connectors/fileupload,下面的是flex
if (request.getRequestURI().indexOf("/fckeditor/editor/filemanager/connectors")>0) {
//System.out.println("使用自定义的过滤器");
chain.doFilter(req, res);
}else{
//System.out.println("使用默认的过滤器");
super.doFilter(req, res, chain);
}
}
}
在web.xml中:
<!-- struts -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.sinowell.fckeditor.ExtendStrutsFilter</filter-class><!-- 替换掉默认的过滤器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
参考:StrutsPrepareAndExecuteFilter学习笔记
package org.apache.struts2.dispatcher.ng.filter;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.PrepareOperations;
import org.apache.struts2.dispatcher.ng.ExecuteOperations;
import org.apache.struts2.dispatcher.ng.InitOperations;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Handles both the preparation and execution phases of the Struts dispatching process. This filter is better to use
* when you don't have another filter that needs access to action context information, such as Sitemesh.
*/
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
private PrepareOperations prepare;
private ExecuteOperations execute;
//初始化过滤器
public void init(FilterConfig filterConfig) throws ServletException {
InitOperations init = new InitOperations(); //初始化辅助对象,封装了初始化的一些操作
try {
FilterHostConfig config = new FilterHostConfig(filterConfig); //对filterConfig进行封装
init.initLogging(config); //通过config,初始化内部Struts的记录
Dispatcher dispatcher = init.initDispatcher(config); //通过config,创建并初始化dispatcher
init.initStaticContentLoader(config, dispatcher); //通过config和dispatcher,初始化与过滤器相关的静态内容加载器
prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher); //通过config和dispatcher,创建request被处理前的系列操作对象
execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);//通过config和dispatcher,创建处理request的系列操作对象
} finally {
init.cleanup(); //清空ActionContext
}
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
prepare.createActionContext(request, response); //创建ACTIONCONTEXT,并初始化Theadlocal
prepare.assignDispatcherToThread(); //指派dispatcher给Theadlocal
prepare.setEncodingAndLocale(request, response); //设置request的编码和LOCAL
request = prepare.wrapRequest(request); //封装request
ActionMapping mapping = prepare.findActionMapping(request, response); //查找并选择创建ActionMapping
if (mapping == null) { //如果映射不存在
boolean handled = execute.executeStaticResourceRequest(request, response); //试图执行一个静态资源的请求
if (!handled) {
chain.doFilter(request, response);
}
} else { //如果存在映射
execute.executeAction(request, response, mapping); //执行action
}
} finally {
prepare.cleanupRequest(request); //清除request的Threadlocal
}
}
public void destroy() {
prepare.cleanupDispatcher();
}
}
fck 在 struts2上不能上传文件的问题,struts2和fck冲突造成无法上传图片或文件,
原因是struts在web.xml中配制的过滤器把fck的servlet请求转发了。
解决办法是自实现一个过滤器ExtendStrutsFilter,继承struts2默认的过滤器StrutsPrepareAndExecuteFilter
用这个类替换掉web.xml中的struts过滤器类StrutsPrepareAndExecuteFilter就可以了
源码如下:
package com.sinowell.fckeditor;
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;
/**
* @author Rain
* 这个类用来解决struts2和fck冲突造成无法上传图片或文件 的问题,原
* 因是struts在web.xml中配制的过滤器把fck的servlet请求转发了。
* 用这个类替换掉web.xml中的struts过滤器类StrutsPrepareAndExecuteFilter就可以了
*/
public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
//不过滤的url,可以不断添加,如fck可用/fckeditor/editor/filemanager/connectors/fileupload,下面的是flex
if (request.getRequestURI().indexOf("/fckeditor/editor/filemanager/connectors")>0) {
//System.out.println("使用自定义的过滤器");
chain.doFilter(req, res);
}else{
//System.out.println("使用默认的过滤器");
super.doFilter(req, res, chain);
}
}
}
在web.xml中:
<!-- struts -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.sinowell.fckeditor.ExtendStrutsFilter</filter-class><!-- 替换掉默认的过滤器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
参考:StrutsPrepareAndExecuteFilter学习笔记
package org.apache.struts2.dispatcher.ng.filter;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.PrepareOperations;
import org.apache.struts2.dispatcher.ng.ExecuteOperations;
import org.apache.struts2.dispatcher.ng.InitOperations;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Handles both the preparation and execution phases of the Struts dispatching process. This filter is better to use
* when you don't have another filter that needs access to action context information, such as Sitemesh.
*/
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
private PrepareOperations prepare;
private ExecuteOperations execute;
//初始化过滤器
public void init(FilterConfig filterConfig) throws ServletException {
InitOperations init = new InitOperations(); //初始化辅助对象,封装了初始化的一些操作
try {
FilterHostConfig config = new FilterHostConfig(filterConfig); //对filterConfig进行封装
init.initLogging(config); //通过config,初始化内部Struts的记录
Dispatcher dispatcher = init.initDispatcher(config); //通过config,创建并初始化dispatcher
init.initStaticContentLoader(config, dispatcher); //通过config和dispatcher,初始化与过滤器相关的静态内容加载器
prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher); //通过config和dispatcher,创建request被处理前的系列操作对象
execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);//通过config和dispatcher,创建处理request的系列操作对象
} finally {
init.cleanup(); //清空ActionContext
}
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
prepare.createActionContext(request, response); //创建ACTIONCONTEXT,并初始化Theadlocal
prepare.assignDispatcherToThread(); //指派dispatcher给Theadlocal
prepare.setEncodingAndLocale(request, response); //设置request的编码和LOCAL
request = prepare.wrapRequest(request); //封装request
ActionMapping mapping = prepare.findActionMapping(request, response); //查找并选择创建ActionMapping
if (mapping == null) { //如果映射不存在
boolean handled = execute.executeStaticResourceRequest(request, response); //试图执行一个静态资源的请求
if (!handled) {
chain.doFilter(request, response);
}
} else { //如果存在映射
execute.executeAction(request, response, mapping); //执行action
}
} finally {
prepare.cleanupRequest(request); //清除request的Threadlocal
}
}
public void destroy() {
prepare.cleanupDispatcher();
}
}
发表评论
-
MAC OS 配置svn服务器
2015-07-27 16:07 737MAC如果安装了XCode,就已经自带了SVN,所以,直接使 ... -
tomcat下部署了多个项目且都使用log4j
2015-07-24 11:33 847<!--如果不定义webAppRootKey参数,那么 ... -
Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉
2015-07-04 17:43 778下面每个单独的文件都没有红叉报错,整个项目上显示个红叉; ... -
maven中导入本地jar包
2015-07-03 15:57 1075要在maven中引入本地jar包,首先需要将jar包复制到项 ... -
java 执行sql脚本的3种方式 (ant,ibatis,ScriptRunner) (转)
2015-01-21 10:10 1126java执行sql文件这个问题麻烦的地方在于解析sql ... -
spring mvc 地址栏 中文传值显示乱码解决办法
2014-09-04 10:29 673修改tomcat的server.xml文件,将<Con ... -
java.sql.SQLException: Value'0000-00-00'异常解决办法及mysql的url设置(转)
2014-04-10 11:47 739一、0000-00-00错误及 ... -
hibernate配置
2014-01-07 10:19 0<prop key="hibernate.c ... -
windows下一台机器安装两个MYSQL数据库
2013-12-27 16:20 7911.正常安装第一个mysql(安装步骤省略) 2.在控制面板 ... -
服务器mysql及c3p0设置
2013-12-19 14:20 7051)interactive_timeout: 参数含义:服务器 ... -
hibernate关闭连接
2013-12-17 17:02 815通过session工厂关闭session对象。 将sessio ... -
web.xml 配置 mime-mapping
2013-12-17 15:56 14331.指定了自己的javaEncoding <servl ... -
JSP中fckeditor控件表情修改以及文件上传(转)
2013-10-07 16:58 953(一)fckeditor控件表情修改 fckconfig.j ... -
<context-param>与<init-param>的区别与作用
2013-10-07 16:25 623web.xml的配置中<context-param> ...
相关推荐
**FCK编辑器集成图片批量上传详解** ...以上就是关于FCKeditor集成图片批量上传及其水印功能的详细解释,通过这些步骤,开发者可以为自己的网站或应用程序提供一个高效、便捷且安全的图片上传解决方案。
综上所述,“fck文件上传模板”是一个包含FCKeditor文件上传功能的示例或配置,对于理解和实现FCKeditor的文件上传功能具有参考价值。通过深入研究和理解这些知识点,开发者可以有效地集成和定制FCKeditor的文件上传...
然而,在实际使用过程中,可能会遇到一个问题:当上传包含中文字符的文件或图片时,文件名显示为乱码。这个问题主要涉及到字符编码和PHP的处理方式。本文将详细讲解如何解决FCKeditor在处理中文文件名时出现乱码的...
### FCK在服务器上上传图片问题的解决方法 在网站开发过程中,经常需要用到富文本编辑器,其中FCKeditor是一款非常流行的开源富文本编辑器。然而,在实际部署应用时,可能会遇到服务器上无法正常上传图片的问题。...
2. **安全性考量**:由于远程图片上传可能会引发安全问题,如滥用服务器带宽或存储空间,因此需要设置白名单或者限制上传的域名。这可以通过`Config.RemoteImageUploadAllowedDomains`和`Config....
在IT行业中,FCKeditor是...总之,解决FCKeditor上传中文名图片乱码问题的关键在于确保所有环节的字符编码一致,包括编辑器、服务器、数据库和前端页面。通过调整这些设置,可以确保中文文件名在上传和显示时的正确性。
1. 用户在FCKeditor中选择要上传的图片或文档。 2. FCKeditor通过异步请求(通常是AJAX)将文件数据发送到后台服务。 3. 后台服务接收到文件后,进行合法性检查,如文件类型、大小限制等。 4. 文件被保存到服务器的...
《掌握FCK编辑器:实现中文图片上传功能》 FCKeditor是一款强大的开源在线文本编辑器,它使得在网页上创建和编辑富文本内容变得轻松易行。然而,原版的FCKeditor存在一个限制,即仅支持数字或字母命名的图片上传。...
这个压缩包文件的标题和描述提到的“Fck上传图片 falsf file 文件 配置 以及源码”,显然与FCKeditor的图片上传功能有关。下面我们将深入探讨这一主题。 FCKeditor的图片上传功能是通过一个名为"FCKeditor Upload ...
在本示例中,"C# .NET FCK 编辑器例子"着重解决了在服务器上无法上传图片的问题,这通常是由于服务器配置、文件路径或权限设置不正确导致的。 首先,我们需要理解FCKeditor的工作原理。它通过JavaScript与服务器端...
fck例子,采用与STRUTS2兼容的FCK插件,良好解决了STRUTS2与FCKEDITOR不兼容的问题。
C#中的FCKeditor是一款强大的富文本编辑器,它允许用户在Web应用程序中进行文本编辑、图片上传和文件管理。FCKeditor以其易用性和丰富的功能,在开发人员中颇受欢迎,尤其适合那些需要构建内容管理系统或者论坛的...
解决此类问题通常需要一定的技术基础,如果以上步骤无法解决问题,可能需要查看ECShop和FCKeditor的官方文档,或者在开发者社区寻求帮助。同时,备份数据并谨慎操作,以免对网站造成不可逆的损害。 在进行任何修改...
FCKeditor是一款开源的富文本编辑器,它提供了丰富的文本格式化功能,同时也支持用户上传图片和其他文件。在这个场景下,我们讨论的是如何利用FCKeditor实现文件上传,并自定义文件名和按日期存放位置。 首先,我们...
5. **安全性考虑**:为了防止恶意文件上传,服务器端的上传脚本需要进行文件类型检查和大小限制。例如,限制只能上传图片、视频等特定类型的文件,并设定单个文件大小上限。 6. **文件管理器**:FCKeditor内置了一...
本资源包“fck资源整合包”专注于解决一个常见的问题:图片上传时出现的中文乱码问题,同时整合了三个关键的技术栈:FCKeditor、Struts和Hibernate。下面我们将详细探讨这些技术以及它们在整合中的作用。 FCKeditor...
总的来说,这个FCK编辑器修改版为开发者提供了一个强大且灵活的文本编辑解决方案,尤其对于需要用户生成内容的网站来说,它的图片上传功能更是极大地提升了用户体验。如果你在使用过程中遇到任何问题,可以通过提供...
“解决struts2与fck整合后的图片上传无权限问题!”表明Fck2.4编辑器已经处理了与Struts2框架集成时可能出现的权限问题。Struts2是一个强大的MVC框架,广泛用于Java Web开发。在整合FCKeditor时,可能会遇到权限设置...
为了解决这个问题,我们可以通过对FCK编辑器进行一些小的修改,使其能够支持上传带有中文字符的图片。 首先,我们需要理解FCK编辑器的工作原理。FCKeditor内部有一套文件上传处理逻辑,包括文件名的编码和解码过程...
### fck上传等功能不能使用(fck和ie9的问题) #### 概述 在使用FCKeditor时,可能会遇到在Internet Explorer 9 (IE9) 浏览器中某些功能无法正常工作的情况,例如文件上传功能。这主要是由于IE9与FCKeditor之间...