SpringMVC實現ajax文件上傳


SpringMVC實現文件上傳,直接上代碼:

后台代碼:

01 @RequestMapping(value = "/uploadApk")
02 @ResponseBody
03 public Object uploadApk(
04         @RequestParam(value = "apkFile") MultipartFile apkFile,
05         HttpServletRequest request, HttpServletResponse response) {
06     Map<String,Object> resMap = new HashMap<String,Object>();
07     if (apkFile != null) {
08         //獲取保存的路徑,
09         String realPath = request.getSession().getServletContext()
10                 .getRealPath("/upload/apk");
11         if (apkFile.isEmpty()) {
12             // 未選擇文件
13             resMap.put("status", StatusConstants.STATUS_PARM_IS_EMPTY);
14         } else{
15             // 文件原名稱
16             String originFileName = apkFile.getOriginalFilename();
17             try {
18                 //這里使用Apache的FileUtils方法來進行保存
19                 FileUtils.copyInputStreamToFile(apkFile.getInputStream(),
20                         new File(realPath, originFileName));
21                 resMap.put("status",StatusConstants.STATUS_OK);
22             } catch (IOException e) {
23                 System.out.println("文件上傳失敗");
24                 resMap.put("status", StatusConstants.STATUS_EXECPTION);
25                 e.printStackTrace();
26             }
27         }
28  
29     }
30     return resMap;
31 }

 

Spring配置文件中需要添加如下內容:

01 <!-- SpringMVC上傳文件時,需配置MultipartResolver處理器 -->
02 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
03     <!-- 指定所上傳文件的總大小不能超過80M......注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 -->
04     <property name="maxUploadSize" value="80000000"/>
05 </bean>
06   
07 <!-- SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException -->
08 <!-- 該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進入到Controller方法中 -->
09 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
10     <property name="exceptionMappings">
11         <props>
12             <!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到/WEB-INF/jsp/error_fileupload.jsp頁面 -->
13             <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
14         </props>
15     </property>
16 </bean>

 

jsp頁面內容(這里結合的EasyUi的一些內容):

01 function ajaxFileUpload(){
02     //獲取軟件更新詳情
03     var apkIntroduce = $("#apkInfo").val();
04     //開始上傳文件時顯示一個圖片,文件上傳完成將圖片隱藏
05     //$("#loading").ajaxStart(function(){$(this).show();}).ajaxComplete(function(){$(this).hide();});
06     //執行上傳文件操作的函數,使用encodeURI方法,防止傳輸中文字符的時候出現亂碼
07     var uploadUrl = encodeURI(encodeURI(basePath + "uploadApk.do?apkIntroduce="+apkIntroduce));
08     $.ajaxFileUpload({
09         //處理文件上傳操作的服務器端地址(可以傳參數,已親測可用)
10         url:uploadUrl,
11 //      url:basePath + "uploadApk.do?apkIntroduce="+apkIntroduce,
12         secureuri:false,                       //是否啟用安全提交,默認為false
13         fileElementId:'apkFile',           //文件選擇框的id屬性
14         dataType:'text',                       //服務器返回的格式,可以是json或xml等
15         success:function(data, status){        //服務器響應成功時的處理函數
16             data = data.replace("<PRE>", '');  //ajaxFileUpload會對服務器響應回來的text內容加上<pre>text</pre>前后綴
17             data = data.replace("</PRE>", '');
18             data = data.replace("<pre>", '');
19             data = data.replace("</pre>", ''); //本例中設定上傳文件完畢后,服務端會返回給前台[0`filepath]
20              
21             //將String字符串轉換成json
22             var dataset = $.parseJSON(data);
23             if(dataset.status == "ok"){
24                 $('#result').html("Apk上傳成功
25 ");
26                 $.messager.alert("提示","上傳成功");
27                  
28                 //關閉添加窗口
29                 addApkWindow.window('close');
30                 //刷新頁面
31                 datagrid.datagrid('reload');
32                  
33             }else if ( dataset.status == "parm_is_empty"){
34                 $('#result').html("沒有選擇APK!");
35             }else {
36                 $('#result').html('Apk上傳失敗,請重試!!');
37             }
38         },
39         error:function(data, status, e){ //服務器響應失敗時的處理函數
40             console.log(e);
41             console.log(data);
42             $('#result').html('APK上傳失敗,請重試!!');
43         }
44     });
45 }

Html頁面代碼:

01     <div id="addApkWindows">
02      
04         <div id="result"></div>
05 <!--         <img id="uploadImage" src="http://www.firefox.com.cn/favicon.ico"> -->
06         軟件更新詳情:
07  
08         <textarea rows="2" cols="30" id="apkInfo"></textarea>
09          
10 上傳文件:
11  
12         <input type="file" id="apkFile" name="apkFile"/>
13  
14         <input type="button" value="上傳" onclick="ajaxFileUpload()"/>
15  
16     </div>

 

 

上面的JSP代碼中,使用到了JS中的encodeURI方法,這個的目的是為了防止在傳遞中文參數時的亂碼問題,當然,如果只傳文件的話,則沒有必要使用encodeURI


免責聲明!

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



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