首先要導入2個包(上傳文件包和io的包)java
配置文件spring-servlet.xml文件中web
<!-- 配置文件上傳MultipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5000000"></property> </bean>
若是id="multipartResolver"沒傳,就會報如下的錯(當心當心)spring
Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
添加文件的顯示頁面add.sjp數組
a、enctype="multipart/form-data"這句就是告訴,要添加文件,很重要服務器
b、 attach:<input type="file" name="attach"><br/>app
<form:form modelAttribute="user" method="post" enctype="multipart/form-data"> ID:<form:input path="id"/><br/> userName:<form:input path="userName"/><form:errors path="userName"/><br/> password:<form:input path="password"/><form:errors path="password"/><br/> email:<form:input path="email"/><form:errors path="email"/><br/> attach:<input type="file" name="attach"><br/> <input type="submit" value="提交"/> </form:form>
修改添加的方法函數
a、指定路徑post
b、上傳文件,就要文件保存的目標位置spa
@RequestMapping(value="/add",method=RequestMethod.POST) public String add(@Validated User user,BindingResult bindingResult,MultipartFile attach,HttpServletRequest request){ //上傳文件就是要上傳的路徑因此就須要request對象 if(bindingResult.hasErrors()){ return "user/add"; } //指定上傳位置 String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload"); System.out.println(uploadFilePath); System.out.println(attach.getOriginalFilename());//原始名 System.out.println(attach.getContentType());//類型 System.out.println(attach.getName());//頁面表單控件name的值 if(!attach.isEmpty()){ try { //"/" 更換成自動識別分隔符File.separator File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename()); //第一個是拿到輸入流,第二個參數是保存到哪裏 FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //把user對象放進去key(id) userList.put(user.getId(), user); // return "user/userlist";//返回到邏輯視圖名 //(添加後,不能把添加過的數據展現出來)服務器端行爲 return "redirect:/user/list";//客戶端從新發送請求(把添加進去的展現出來) }
多文件的上傳code
由於是多文件因此必定要加@RequestParam不加的話報以下異常
//Could not instantiate bean class [[Lorg.springframework.web.multipart.MultipartFile;]: No default constructor found;nested exception is java.lang //不能實例化bean類[[Lorg.springframework.web.multipart。MultipartFile;]:沒有默認構造函數發現,嵌套異常. lang。
//頁面500
//文件上傳(多文件) @RequestMapping(value="/add",method=RequestMethod.POST) public String add(@Validated User user,BindingResult bindingResult,@RequestParam("attachs") MultipartFile[] attachs,HttpServletRequest request){ //上傳文件就是要上傳的路徑因此就須要request對象 if(bindingResult.hasErrors()){ return "user/add"; } //指定上傳位置 String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload"); try { for(MultipartFile attach:attachs){ if(!attach.isEmpty()){ //"/" 更換成自動識別File.separator File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename()); //第一個是拿到輸入流,第二個參數是保存到哪裏 FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile); } } }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //把user對象放進去key(id) userList.put(user.getId(), user); // return "user/userlist";//返回到邏輯視圖名 //(添加後,不能把添加過的數據展現出來)服務器端行爲 return "redirect:/user/list";//客戶端從新發送請求(把添加進去的展現出來) }
由於多文件是一個數組,attach:<input type="file" name="attachs"><br/>
這邊的name要是attachs,不然就找不到
<form:form modelAttribute="user" method="post" enctype="multipart/form-data"> ID:<form:input path="id"/><br/> userName:<form:input path="userName"/><form:errors path="userName"/><br/> password:<form:input path="password"/><form:errors path="password"/><br/> email:<form:input path="email"/><form:errors path="email"/><br/> attach:<input type="file" name="attachs"><br/> attach1:<input type="file" name="attachs"><br/> attach2:<input type="file" name="attachs"><br/> <input type="submit" value="提交"/> </form:form>