angularjsFileUpload+Springmvc上傳文件

1.html頁面以及js來自於angularjsFileUpload的demo

multiple屬性爲允許多個文件同時上傳


參數設置

url爲文件上傳路徑

formData屬性對應的是參數數組,這裏以傳遞id爲例


2.springmvc後臺

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. package com.baosight.webapp.web;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.HashMap;  
  6. import java.util.Iterator;  
  7. import java.util.Map;  
  8.   
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.web.bind.annotation.RequestBody;  
  14. import org.springframework.web.bind.annotation.RequestMapping;  
  15. import org.springframework.web.bind.annotation.RequestMethod;  
  16. import org.springframework.web.bind.annotation.ResponseBody;  
  17. import org.springframework.web.multipart.MultipartFile;  
  18. import org.springframework.web.multipart.MultipartHttpServletRequest;  
  19. import org.springframework.web.multipart.commons.CommonsMultipartResolver;  
  20.   
  21. import com.baosight.webapp.bean.App;  
  22.   
  23.   
  24.   
  25. @Controller  
  26. @RequestMapping("/ngFileUpload")  
  27. public class NgFileUpload {  
  28.   
  29.     @RequestMapping(value="/test", method=RequestMethod.POST    )  
  30.     @ResponseBody  
  31.     public Map<String, Object> ngUpload(HttpServletRequest request,HttpServletResponse res){  
  32.         System.out.println("in");  
  33.         //接收參數  
  34.         int id= Integer.parseInt(request.getParameter("id"));  
  35.         System.out.println("id=="+id);  
  36.         Map<String, Object> resMap = new HashMap<String, Object>();  
  37.         resMap.put("result""error");  
  38.   
  39.         //解析器解析request的上下文  
  40.         CommonsMultipartResolver multipartResolver =  
  41.             new CommonsMultipartResolver(request.getSession().getServletContext());  
  42.           //先判斷request中是否包涵multipart類型的數據,  
  43.         if(multipartResolver.isMultipart(request)){  
  44.            //再將request中的數據轉化成multipart類型的數據  
  45.             MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;  
  46.             Iterator iter = multiRequest.getFileNames();  
  47.             while(iter.hasNext()){  
  48.                 //這裏的name爲fileItem的alias屬性值,相當於form表單中name  
  49.                 String name=(String)iter.next();  
  50.                 System.out.println("name:"+name);  
  51.                 //根據name值拿取文件  
  52.                 MultipartFile file = multiRequest.getFile(name);  
  53.                 if(file != null){  
  54.                     String fileName = file.getOriginalFilename();  
  55.                     String path = "D:/test/" + fileName;  
  56.                     File localFile = new File(path);  
  57.                     if(!localFile.getParentFile().exists()) {  
  58.                          //如果目標文件所在的目錄不存在,則創建父目錄  
  59.                          localFile.getParentFile().mkdirs();  
  60.                          System.out.println("parent:"+localFile.getParentFile().getPath());  
  61.                      }  
  62.                     //寫文件到本地  
  63.                     try {  
  64.                         file.transferTo(localFile);  
  65.                     } catch (IOException e) {  
  66.                         // TODO Auto-generated catch block  
  67.                         e.printStackTrace();  
  68.                         return resMap;  
  69.                     }  
  70.                 }  
  71.             }  
  72.           }else {  
  73.   
  74.               return resMap;  
  75.         }  
  76.           resMap.put("result""success");  
  77.           return resMap;  
  78.     }  
  79.   
  80.   
  81. }  

3.備註:

獲取參數 request.getParameter("id")
這裏的拿到的name爲fileItem的alias屬性值,相當於form表單中name           String name=(String)iter.next();
如果想通過file的name屬性值獲取文件,對文件進行分類接受,可以通過controller中item的alias屬性值。

uploader.uploadAll()是提交所有文件的方法,但是實質上來說該方法是將每個文件提交一次。雖然只觸發了一次uploadAll方法,但是有多少個文件就會進多少次後臺。實質上是文件進行單個傳輸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章