DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
2016-09-02 00:18
375 查看
最近在做一个小小的上传功能竟被虐得体无完肤, 在使用tomcat内置的DiskFileUpload获取前台jsp传来的附件参数和其他表单参数, 竟然出现莫名其妙的乱码问题, 即使tomcat的server.xml和web.xml和jsp页面都做了UTF8 encode处理, 可还是有乱码问题!
正当我想到用new String(fileItem.getName().getBytes("GBK"),"UTF-8");这个办法临时解决了乱码问题(想不通怎么会有GBK, 项目所有文件都是UTF8编码的), 好景不长, 又出现了神经问题: 汉字个数为奇数时(从第三位开始), GBK转UTF8, 奇数位的汉字还是乱码, 其他位数转码正常!
后来经过不停折腾和专研, 终于发现了治本的办法: 使用Spring的CommonsMultipartResolver. 下面我想对这两种上传方式做一个对比:
1.传统的Tomcat自带组件DiskFileUpload上传
由于使用了multipart/formdata提交数据, spring mvc是无法轻易获得输入参数, 必须获得fileItem列表, 在递归查找, 很麻烦!
2. Spring的CommonsMultipartResolver上传
先在配置文件进行注入:
注意: 使用这个配置, 还必须在项目中引用common.fileupload组件.
然后在mvc 方法加上输入参数@RequestParam("pic") MultipartFile picFile, 注意pic就是前台传来的附件对象.
有了最起码的CommonsMultipartResolver对象注入, 它可以让mvc方法能够正常映射前台页面传来的参数, 使用MultipartFile对象里的是transferTo方法能方便地保存附件到本地, 而且还能完美解决乱码问题.
正当我想到用new String(fileItem.getName().getBytes("GBK"),"UTF-8");这个办法临时解决了乱码问题(想不通怎么会有GBK, 项目所有文件都是UTF8编码的), 好景不长, 又出现了神经问题: 汉字个数为奇数时(从第三位开始), GBK转UTF8, 奇数位的汉字还是乱码, 其他位数转码正常!
后来经过不停折腾和专研, 终于发现了治本的办法: 使用Spring的CommonsMultipartResolver. 下面我想对这两种上传方式做一个对比:
1.传统的Tomcat自带组件DiskFileUpload上传
DiskFileUpload diskFileUpload = new DiskFileUpload(); List fileItems = diskFileUpload.parseRequest(request); Iterator iter = fileItems.iterator(); //查找multipart里面的表单值 for( ; iter.hasNext(); ) { FileItem fileItem = (FileItem) iter.next(); if( fileItem.isFormField() == true) { //获取表单数值 } else { //获取附件对象 } }
由于使用了multipart/formdata提交数据, spring mvc是无法轻易获得输入参数, 必须获得fileItem列表, 在递归查找, 很麻烦!
2. Spring的CommonsMultipartResolver上传
先在配置文件进行注入:
1 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" 2 p:defaultEncoding="UTF-8" 3 p:maxUploadSize="5400000" 4 p:uploadTempDir="hkrsImage/Appeal" > 5 </bean>
注意: 使用这个配置, 还必须在项目中引用common.fileupload组件.
然后在mvc 方法加上输入参数@RequestParam("pic") MultipartFile picFile, 注意pic就是前台传来的附件对象.
有了最起码的CommonsMultipartResolver对象注入, 它可以让mvc方法能够正常映射前台页面传来的参数, 使用MultipartFile对象里的是transferTo方法能方便地保存附件到本地, 而且还能完美解决乱码问题.
相关文章推荐
- JAVA Server上传文件 Spring MultipartResolver 或者 ServletFileUpload
- Using a MultipartResolver with Commons FileUpload[就是使用commons FileUpload上传文件]
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
- Spring CommonsMultipartResolver 上传文件
- spring mvc CommonsMultipartResolver文件上传maxUploadSize限制大小
- 文件上传对比 : commons-fileupload/cos/jspsmartUpload
- spring mvc CommonsMultipartResolver文件下传maxUploadSize限制大小
- Spring CommonsMultipartResolver 上传文件
- spring mvc CommonsMultipartResolver文件上传maxUploadSize限制大小
- spring ApplicationContext-mvc之CommonsMultipartResolver对文件上传的支持
- springMVC3学习(十二)--文件上传优化CommonsMultipartResolver
- Spring CommonsMultipartResolver 上传文件
- springMVC3学习(十一)--文件上传CommonsMultipartFile
- 使用Spring CommonsMultipartResolver 上传文件
- 使用Spring CommonsMultipartResolver 上传文件
- springMVC3学习(十二)--文件上传优化CommonsMultipartResolver
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
- springMVC3学习(十一)--文件上传CommonsMultipartFile
- CommonsMultipartFile---用Spring实现文件上传
- springMVC3学习(十二)--文件上传优化CommonsMultipartResolver