springMvc文件上傳,首先兩個基礎,
1.form表單屬性中加上enctype="multipart/form-data"
強調:form表單的<form method="post" ...,method必須有,我這里是用的是post,至於get行不行沒試過,沒有method="post"也會報不是multipart請求的錯誤。
2.配置文件中配置MultipartResolver
文件超出限制會在進入controller前拋出異常,在允許范圍內這個配置無影響
3.后端controller層參數接收
簡單的接收方法,思路:MultipartFile 接受文件並通過IO二進制流(MultipartFile.getInputStream())輸入到FileOutStream保存文件,然后該干嘛就干嘛
參數接收同MultipartFile 接收一樣。
接受form表單截圖中name為file和id的文件和參數。如下
@RequestMapping(value = "attendee_uploadExcel.do") @ResponseBody public void uploadExcel(@RequestParam("file") MultipartFile file, @RequestParam("id") String id) throws Exception { //form表單提交的參數測試為String類型 if (file == null) return ; String fileName = file.getOriginalFilename(); String path = getRequest().getServletContext().getRealPath("/upload/excel"); //獲取指定文件或文件夾在工程中真實路徑,getRequest()這個方法是返回一個HttpServletRequest,封裝這個方法為了處理編碼問題 FileOutputStream fos = FileUtils.openOutputStream(new File(path+"/" +fileName));//打開FileOutStrean流 IOUtils.copy(file.getInputStream(),fos);//將MultipartFile file轉成二進制流並輸入到FileOutStrean fos.close();// ...... }
二、前后端分享的文件上件方法,此時前端傳后后台的為文件base64編碼的字符串
其他方法,將HttpServletRequest req強轉成MultipartHttpServletRequest req后,req.getParameter("id");
@ResponseBody @PostMapping("/import") public Integer importFromExcel(HttpServletRequest request) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile file = multipartRequest.getFile("file"); // 通過參數名獲取指定文件 String id = multipartRequest.getParameter("id"); String fileName = file.getOriginalFilename(); ......... }
原文鏈接 http://blog.csdn.net/u013771277/article/details/47384817