1.html頁面以及js來自於angularjsFileUpload的demo
multiple屬性爲允許多個文件同時上傳
參數設置
url爲文件上傳路徑
formData屬性對應的是參數數組,這裏以傳遞id爲例
2.springmvc後臺
- package com.baosight.webapp.web;
- import java.io.File;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.MultipartHttpServletRequest;
- import org.springframework.web.multipart.commons.CommonsMultipartResolver;
- import com.baosight.webapp.bean.App;
- @Controller
- @RequestMapping("/ngFileUpload")
- public class NgFileUpload {
- @RequestMapping(value="/test", method=RequestMethod.POST )
- @ResponseBody
- public Map<String, Object> ngUpload(HttpServletRequest request,HttpServletResponse res){
- System.out.println("in");
- //接收參數
- int id= Integer.parseInt(request.getParameter("id"));
- System.out.println("id=="+id);
- Map<String, Object> resMap = new HashMap<String, Object>();
- resMap.put("result", "error");
- //解析器解析request的上下文
- CommonsMultipartResolver multipartResolver =
- new CommonsMultipartResolver(request.getSession().getServletContext());
- //先判斷request中是否包涵multipart類型的數據,
- if(multipartResolver.isMultipart(request)){
- //再將request中的數據轉化成multipart類型的數據
- MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
- Iterator iter = multiRequest.getFileNames();
- while(iter.hasNext()){
- //這裏的name爲fileItem的alias屬性值,相當於form表單中name
- String name=(String)iter.next();
- System.out.println("name:"+name);
- //根據name值拿取文件
- MultipartFile file = multiRequest.getFile(name);
- if(file != null){
- String fileName = file.getOriginalFilename();
- String path = "D:/test/" + fileName;
- File localFile = new File(path);
- if(!localFile.getParentFile().exists()) {
- //如果目標文件所在的目錄不存在,則創建父目錄
- localFile.getParentFile().mkdirs();
- System.out.println("parent:"+localFile.getParentFile().getPath());
- }
- //寫文件到本地
- try {
- file.transferTo(localFile);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return resMap;
- }
- }
- }
- }else {
- return resMap;
- }
- resMap.put("result", "success");
- return resMap;
- }
- }
3.備註:
獲取參數 request.getParameter("id")
這裏的拿到的name爲fileItem的alias屬性值,相當於form表單中name String name=(String)iter.next();
如果想通過file的name屬性值獲取文件,對文件進行分類接受,可以通過controller中item的alias屬性值。
uploader.uploadAll()是提交所有文件的方法,但是實質上來說該方法是將每個文件提交一次。雖然只觸發了一次uploadAll方法,但是有多少個文件就會進多少次後臺。實質上是文件進行單個傳輸。