DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
最近在做一个小小的上传功能竟被虐得体无完肤, 在使用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上传对比相关推荐
- Spring MVC文件上传示例教程 - 单个和多个文件
Spring MVC文件上传示例教程 - 单个和多个文件 文件上传是任何Web应用程序中非常常见的任务.我们之前已经看过如何在Servlet和Struts2文件上传中上传文件.今天我们将学习Sprin ...
- Spring CommonsMultipartResolver 上传文件
http://yanglei008.iteye.com/blog/246920 Spring CommonsMultipartResolver 上传文件 博客分类: spring SpringMVCJ ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.appl ...
- Spring MVC 文件上传 文件下载
索引: 目录索引 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadController.java Files_Ut ...
- Spring MVC 如何上传多个文件到指定位置
Spring MVC 如何上传多个文件到指定位置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...
- SSM框架+Plupload实现分块上传(Spring+SpringMVC+MyBatis+Plupload)
关于Plupload的介绍,相信它的官网http://www.plupload.com/已经给得很详细了.Plupload的上传原理简单点说,就是将用户选中的文件(可多个)分隔成一个个小块,依次向服务 ...
- 全栈开发实战|Spring Boot文件上传与下载
文件上传与下载是Web应用开发中常用的功能之一.接下来我们将讨论如何在Spring Boot的Web应用开发中,如何实现文件的上传与下载. 01.Spring Boot文件上传与下载 在实际的Web应 ...
- spring boot 文件上传工具类(bug 已修改)
以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...
- spring mvc文件上传小例子
spring mvc文件上传小例子 1.jsp页面 <%@page contentType="text/html;charset=UTF-8"%> <%@page ...
- Spring MVC实现上传文件报错解决方案
Spring MVC实现上传文件报错解决方案 参考文章: (1)Spring MVC实现上传文件报错解决方案 (2)https://www.cnblogs.com/liuling/p/2014-3-5 ...
最新文章
- 树莓派如何卸载mysql_树莓派安装MySQL数据库与卸载
- 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记六
- android4.0 SystemUi系统状态栏
- java语言修饰符$_Java语言中的修饰符
- 常见JavaScript基础面试题上(附答案)
- HDU3143Speedy Escape 最短路+二分+搜索
- sbt構建一個spark工程(scala+spark+sbt)
- Domino Web开发规则之二:DOMINO与开发相关的管理规范
- Win11系统怎样设置更改密码
- python 列表有没有顺序_python-如何获取列表的所有顺序,以使该列表等于另一个列表?...
- concurrent包下线程池类小结
- JSP的基础语法和指令(源码刨析,建议收藏)
- [Ubuntu] change mouse scrolling between standard and natural
- 做了这么多年的技术,你有写过博客吗?
- JAVA 并发编程之三:CountDownLatch(门闩)、CyclicBarrier(栅栏)和Semaphore(信号量) 三种并发策略
- SAP LVC_FIELDCATALOG_MERGE 根据表结构生成 fieldcat
- 优酷土豆联姻 视频网站格局的几大猜想
- 228句最常用英文口语短句(转)
- Binary XML file line #16 in: Error inflating class unknown
- 《“胡”说IC——菜鸟工程师完美进阶》
热门文章
- 【Clover】服务器环境中通过Clover boot引导黑群晖DSM(Linux)+Win系统的解决方案与常见bug排查
- 在线html代码生成器,支持网页快速排版 CSS代码一键生成的在线设计工具
- 修改服务器cimc地址,【交换机在江湖】实战案例十三 HUAWEI S系列交换机802.1x特性对接H厂商IMC服务器配置指导...
- 8、Linux下文件服务器搭建及原理讲解
- 使得电脑成为通用计算机器,为什么电脑显示器变成通用非即插即用监视器?
- 记账系统(java)
- windows批处理脚本导入注册表不弹出确认框
- java文件处理(3)——实现文件复制和文件移动
- C# AForge视频录像
- 如何利用UltraISO将系统镜像刻录到U盘上