Spring MultipartResolver 或者 ServletFileUpload 冲突导致获取不到http数据/Multipart数据为空
来源:互联网 发布:cocos2dx程序员工资 编辑:程序博客网 时间:2024/06/13 21:25
如果不知道MultipartResolver 或者ServletFileUpload 的,请点击这里
如果同时使用了MultipartResolver 和ServletFileUpload,就会在iter.hasNext()返回false.然后整个循环就跳出去了。
if (isMultipart) { DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024 * 20, null); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); upload.setSizeMax(1024 * 1024 * 20); List<FileItem> fileItems = upload.parseRequest(req); Iterator<FileItem> iter = fileItems.iterator();
// 这里获取不到任何FileItem while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString("UTF-8"); request.put(name, value); } else { byte[] filebytes = item.get(); if (StringUtils.isBlank(item.getName())) { continue; } request.put(item.getFieldName(), new String(filebyte, "utf-8")); } } }}整个问题产生的原因是Spring框架先调用了MultipartResolver 来处理http multi-part的请求。这里http multipart的请求已经消耗掉。后面又交给ServletFileUpload ,那么ServletFileUpload 就获取不到相应的multi-part请求。
如果帐前 卒想快速解决这个问题。解决方法是加入帐前卒的multipartResolver,来单独处理某些请求。这些请求需要特判。例如下面的代码:
package example;import javax.servlet.http.HttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartResolver;/** * @author 帐前卒 */public class MyMultipartResolver extends CommonsMultipartResolver { private String excludeUrls; private String[] excludeUrlArray; public String getExcludeUrls() { return excludeUrls; } public void setExcludeUrls(String excludeUrls) { this.excludeUrls = excludeUrls; this.excludeUrlArray = excludeUrls.split(","); } /** * 这里是处理Multipart http的方法。如果这个返回值为true,那么Multipart http body就会MyMultipartResolver 消耗掉.如果这里返回false * 那么就会交给后面的自己写的处理函数处理例如刚才ServletFileUpload 所在的函数 * @see org.springframework.web.multipart.commons.CommonsMultipartResolver#isMultipart(javax.servlet.http.HttpServletRequest) */ @Override public boolean isMultipart(HttpServletRequest request) { for (String url: excludeUrlArray) {
// 这里可以自己换判断 if (request.getRequestURI().contains(url)) { return false; } } return super.isMultipart(request); } }
然后在web.xml中这样写:
<bean id="multipartResolver" class="example.MyMultipartResolver"><property name="excludeUrls" value="example"/><!-- url中带有example的http请求就不会被multipartResolver先解析--></bean>
- Spring MultipartResolver 或者 ServletFileUpload 冲突导致获取不到http数据/Multipart数据为空
- Spring MultipartResolver 和ServletFileUpload 冲突导致获取不到上传文件的url
- servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- kindeditor上传文件在SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题 .
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- 简单选择器获取不到数据或者页面为空
- 解决Spring MultipartResolver和ServletFileUpload 冲突
- Java-上传文件Spring MultipartResolver 或者 ServletFileUpload
- JAVA Server上传文件 Spring MultipartResolver 或者 ServletFileUpload
- multipart/form-data 获取不到hidden数据
- Android studio http请求获取数据失败或者获取不到数据原因
- Android studio http请求获取数据失败或者获取不到数据原因
- spring form 提交类型为 enctype="multipart/form-data"时需配置multipartResolver
- tomcat配了环境变量还一闪而过
- 多态(Polymorphism)
- JS radio记忆选择
- 用PHP操作路由器
- 5月22日IIS配置的相关问题
- Spring MultipartResolver 或者 ServletFileUpload 冲突导致获取不到http数据/Multipart数据为空
- Collection与Collections的区别
- android
- JS 自动提交表单跳转
- linux下文件夹压缩
-
- jquery.validate使用攻略
- android button 在点击之后setPress失效
- b179: 空罐 Cans