最近在做一个小小的上传功能竟被虐得体无完肤, 在使用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上传

 1 DiskFileUpload diskFileUpload = new DiskFileUpload();
 2             List fileItems = diskFileUpload.parseRequest(request);
 3             Iterator iter = fileItems.iterator();
 4             //查找multipart里面的表单值
 5             for( ; iter.hasNext(); ) {
 6                 FileItem fileItem = (FileItem) iter.next();
 7                 if( fileItem.isFormField() == true) {
 8                     //获取表单数值
 9                 }
10                         else {
11                                 //获取附件对象
12                         }
13             }

由于使用了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方法能方便地保存附件到本地, 而且还能完美解决乱码问题.

转载于:https://www.cnblogs.com/plain-heart/p/5831911.html

DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比相关推荐

  1. Spring MVC文件上传示例教程 - 单个和多个文件

    Spring MVC文件上传示例教程 - 单个和多个文件 文件上传是任何Web应用程序中非常常见的任务.我们之前已经看过如何在Servlet和Struts2文件上传中上传文件.今天我们将学习Sprin ...

  2. Spring CommonsMultipartResolver 上传文件

    http://yanglei008.iteye.com/blog/246920 Spring CommonsMultipartResolver 上传文件 博客分类: spring SpringMVCJ ...

  3. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.appl ...

  4. Spring MVC 文件上传 文件下载

    索引: 目录索引 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadController.java Files_Ut ...

  5. Spring MVC 如何上传多个文件到指定位置

    Spring MVC 如何上传多个文件到指定位置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...

  6. SSM框架+Plupload实现分块上传(Spring+SpringMVC+MyBatis+Plupload)

    关于Plupload的介绍,相信它的官网http://www.plupload.com/已经给得很详细了.Plupload的上传原理简单点说,就是将用户选中的文件(可多个)分隔成一个个小块,依次向服务 ...

  7. 全栈开发实战|Spring Boot文件上传与下载

    文件上传与下载是Web应用开发中常用的功能之一.接下来我们将讨论如何在Spring Boot的Web应用开发中,如何实现文件的上传与下载. 01.Spring Boot文件上传与下载 在实际的Web应 ...

  8. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  9. spring mvc文件上传小例子

    spring mvc文件上传小例子 1.jsp页面 <%@page contentType="text/html;charset=UTF-8"%> <%@page ...

  10. Spring MVC实现上传文件报错解决方案

    Spring MVC实现上传文件报错解决方案 参考文章: (1)Spring MVC实现上传文件报错解决方案 (2)https://www.cnblogs.com/liuling/p/2014-3-5 ...

最新文章

  1. 树莓派如何卸载mysql_树莓派安装MySQL数据库与卸载
  2. 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记六
  3. android4.0 SystemUi系统状态栏
  4. java语言修饰符$_Java语言中的修饰符
  5. 常见JavaScript基础面试题上(附答案)
  6. HDU3143Speedy Escape 最短路+二分+搜索
  7. sbt構建一個spark工程(scala+spark+sbt)
  8. Domino Web开发规则之二:DOMINO与开发相关的管理规范
  9. Win11系统怎样设置更改密码
  10. python 列表有没有顺序_python-如何获取列表的所有顺序,以使该列表等于另一个列表?...
  11. concurrent包下线程池类小结
  12. JSP的基础语法和指令(源码刨析,建议收藏)
  13. [Ubuntu] change mouse scrolling between standard and natural
  14. 做了这么多年的技术,你有写过博客吗?
  15. JAVA 并发编程之三:CountDownLatch(门闩)、CyclicBarrier(栅栏)和Semaphore(信号量) 三种并发策略
  16. SAP LVC_FIELDCATALOG_MERGE 根据表结构生成 fieldcat
  17. 优酷土豆联姻 视频网站格局的几大猜想
  18. 228句最常用英文口语短句(转)
  19. Binary XML file line #16 in: Error inflating class unknown
  20. 《“胡”说IC——菜鸟工程师完美进阶》

热门文章

  1. 【Clover】服务器环境中通过Clover boot引导黑群晖DSM(Linux)+Win系统的解决方案与常见bug排查
  2. 在线html代码生成器,支持网页快速排版 CSS代码一键生成的在线设计工具
  3. 修改服务器cimc地址,【交换机在江湖】实战案例十三 HUAWEI S系列交换机802.1x特性对接H厂商IMC服务器配置指导...
  4. 8、Linux下文件服务器搭建及原理讲解
  5. 使得电脑成为通用计算机器,为什么电脑显示器变成通用非即插即用监视器?
  6. 记账系统(java)
  7. windows批处理脚本导入注册表不弹出确认框
  8. java文件处理(3)——实现文件复制和文件移动
  9. C# AForge视频录像
  10. 如何利用UltraISO将系统镜像刻录到U盘上