环境 : springmvc
今天 用 kindeditor 上传图片的时候 遇到一个问题
按照 kindedirot 提供的例子进行图片的上传
FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); List items = upload.parseRequest(request);
在
List items = upload.parseRequest(request);
的时候 得到的 items 为空
这个问题比较 蛋疼,
看application 中的配置
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1024000000" /> </bean>
其中 CommonsMultipartResolver 类中有一个
public boolean isMultipart(HttpServletRequest request) { return request != null && ServletFileUpload.isMultipartContent(request); }
在
MultipartFilter 中
@Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { MultipartResolver multipartResolver = lookupMultipartResolver(request); HttpServletRequest processedRequest = request; if (multipartResolver.isMultipart(processedRequest)) { if (logger.isDebugEnabled()) { logger.debug("Resolving multipart request [" + processedRequest.getRequestURI() + "] with MultipartFilter"); } processedRequest = multipartResolver.resolveMultipart(processedRequest); } else { if (logger.isDebugEnabled()) { logger.debug("Request [" + processedRequest.getRequestURI() + "] is not a multipart request"); } } try { filterChain.doFilter(processedRequest, response); } finally { if (processedRequest instanceof MultipartHttpServletRequest) { multipartResolver.cleanupMultipart((MultipartHttpServletRequest) processedRequest); } } }
将 request 转换为 MultipartHttpServletRequest (StandardMultipartHttpServletRequest)
----------------------------------
/** * Create a new StandardMultipartHttpServletRequest wrapper for the given request. * @param request the servlet request to wrap * @throws MultipartException if parsing failed */ public StandardMultipartHttpServletRequest(HttpServletRequest request) throws MultipartException { super(request); try { Collection<Part> parts = request.getParts(); MultiValueMap<String, MultipartFile> files = new LinkedMultiValueMap<String, MultipartFile>(parts.size()); for (Part part : parts) { String filename = extractFilename(part.getHeader(CONTENT_DISPOSITION)); if (filename != null) { files.add(part.getName(), new StandardMultipartFile(part, filename)); } } setMultipartFiles(files); } catch (Exception ex) { throw new MultipartException("Could not parse multipart servlet request", ex); } }
但是 在 List items = upload.parseRequest(request); 中 需要的 request 是 HttpServletRequest 所以 这里得到的list 为空
==============================================
解决方法 有两个
1. 定义一个filter 名字为 filterMultipartResolver 并且放到 spring mvc 的filter 以前
2. 重写 org.springframework.web.multipart.commons.CommonsMultipartResolver 类中的
isMultipart 方法
例如 通过 kindeditor 过来的 请求 都有 一个默认参数 dir
public class MyCommonsMultipartResolver extends CommonsMultipartResolver { private static final Logger log = Logger.getLogger(MyCommonsMultipartResolver.class); @Override public boolean isMultipart(HttpServletRequest request) { String dir = request.getParameter("dir"); if(dir!=null){ // kindeditor 上传图片的时候 不进行request 的转换 return false; } return super.isMultipart(request); } }
========
欢迎拍砖。
各位大神 如果有更好的方法,请尽管拍过来。
相关推荐
Spring MVC整合kindeditor-4.1.11富文本编辑器示例, 原创已经测试成功.开发工具为eclipse,服务器是tomcat.其中具体的表述,也已经在博客中发表,可以关注一下.
在Spring MVC框架中整合KindEditor进行文件上传是一个常见的需求,特别是在构建富文本编辑器功能时。KindEditor是一款轻量级且功能丰富的JavaScript富文本编辑器,而Spring MVC是Java后端常用的MVC框架,用于处理...
3. **JAVA后端处理**:这部分会涉及到Servlet或Spring MVC等Java Web框架,展示如何接收来自KindEditor的POST请求,解析上传文件的临时数据,然后保存到服务器的指定目录。 4. **文件存储策略**:这包括如何生成...
【标题】:“自己实现的简单weike系统(SSH+KindEditor)” 这个项目是一个自建的简易威客(weike)平台,它采用SSH(Spring、...同时,这也表明该系统可能使用了Spring MVC的注解配置,避免了XML配置文件的繁琐。
- MVC框架:在ASP.NET MVC、Java Spring MVC等框架中,可以将KindEditor的值绑定到模型字段,方便数据提交。 - AJAX提交:通过监听`beforesubmit`事件,可以在用户保存内容前进行异步验证和提交。 7. **优化与...
为了实现文件上传功能,可能还会涉及Spring MVC的文件上传配置,以及服务器上的文件存储路径管理。UEditor会处理文件上传请求,将文件保存到服务器,并返回文件的URL供富文本内容引用。 总的来说,"springMvc+...
SSH(Spring、Struts、Hibernate)是Java Web开发中常见的三层架构,它整合了Spring的依赖注入、Struts的MVC模式和Hibernate的对象关系映射,提供了一种高效、灵活的开发框架。在本项目中,SSH框架被用来构建网站...
- 常见组件如图表组件(jfreechart/fusioncharts)、富文本编辑器(KindEditor/CKEditor)、多文件上传、表单验证等,需要根据项目需求选择合适的开源库或自定义开发。 - 分页、Grid、TreeMenu、Tab、下拉框等功能...
ssm-demo:Spring + SpringMVC + Mybatis + easyUI整合 :RESTful API + redis缓存 :前扩展分离+部署部署(springboot + vue) :dubbo服务化 :springcloud技术栈实现微服务化 特别提示:数据库sql脚本文件在...
8. **MyBatis框架**:重点在于映射技术,如DQL和DML映射,以及高级动态SQL和与Spring的整合。 9. **Struts2框架**:学习其核心控制流程,包括Action、Interceptor、Result、FreeMarker等,并掌握Struts2的扩展和...
-- 文件上传组件 --> <groupId>commons-fileupload <artifactId>commons-fileupload ${commons-fileupload.version} <!-- Redis客户端 --> <groupId>redis.clients <artifactId>jedis ${...