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方法能方便地保存附件到本地, 而且還能完美解決亂碼問題.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM