commons-fileupload-1.2.2.jarhtml
commons-io-2.4.jarjava
2.jsp頁面設置form表單屬性enctypeweb
在表單中上傳圖片時,須要在form的屬性設置中添加enctype="multipart/form-data"。spring
[html] view plain copymvc
<form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" enctype="multipart/form-data" >
表單中enctype="multipart/form-data"的意思,是設置表單的MIME編碼。默認狀況,這個編碼格式是application/x-www-form-urlencoded,不能用於文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數據,進行下面的操做. enctype="multipart/form-data"是上傳二進制數據;form裏面的input的值以2進制的方式傳過去。app
在頁面form中提交enctype="multipart/form-data"的數據時,須要springmvc對multipart類型的數據進行解析,須要在springmvc.xml中配置multipart類型解析器。dom
[html] view plain copyeclipse
<!-- 文件上傳 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 設置上傳文件的最大尺寸爲5MB --> <property name="maxUploadSize"> <value>5242880</value> </property> </bean>
4.建立圖片虛擬目錄,以存放圖片jsp
eclipse IDE 經過界面進行配置:servers -->Tomcat v8.0 Server at localhost--> 雙擊,選擇-->add external web modules.post
在圖片虛擬目錄中,必定將圖片目錄分級建立(提升i/o性能),通常咱們採用按日期(年、月、日)進行分級建立。
[html] view plain copy
<tr> <td>商品圖片</td> <td> <c:if test="${itemsCustom.pic !=null}"> <img src="/pic/${itemsCustom.pic}" width=100 height=100/> <br/> </c:if> <input type="file" name="items_pic"/> </td> lt;/tr>
<1, 方法的參數中添加MultipartFile items_pic行參 這個跟頁面的圖片的參數名字是一致的;
<2, 爲了不文件名稱相同而衝突,使用UUID.randomUUID()產生一個隨機的數值做爲名稱;
<3. 將圖片數據寫入磁盤:items_pic.transferTo(newFile);
<4. 更新itemsCustom中屬性pic的值itemsCustom.setPic(newFileName);
[java] view plain copy
//在須要校驗的poJo類前加 @Validated, 後面加BindingResult bindingResult 存放出錯信息。 @RequestMapping("/editItemsSubmit") public String editItemsSubmit(Model model, HttpServletRequest request,Integer id, @Validated ItemsCustom itemsCustom, BindingResult bindingResult, MultipartFile items_pic)throws Exception { if(bindingResult.hasErrors()){ List<ObjectError> allErrors = bindingResult.getAllErrors(); for(ObjectError objectError :allErrors){ System.out.println(objectError.getDefaultMessage()); } model.addAttribute("allErrors", allErrors); model.addAttribute("itemsCustom", itemsCustom); return "items/editItems"; } //原始名稱 String originalFilename = items_pic.getOriginalFilename(); //上傳圖片 if(items_pic!=null && originalFilename!=null && originalFilename.length()>0){ //存儲圖片的物理路徑 String pic_path = "C:\\Users\\Administrator.MICROSO-U8JSS8B\\Desktop\\java_code\\picture\\"; //新的圖片名稱 String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf(".")); //新圖片 File newFile = new File(pic_path+newFileName); //將內存中的數據寫入磁盤 items_pic.transferTo(newFile); //將新圖片名稱寫到itemsCustom中 itemsCustom.setPic(newFileName); } itemsService.updateItems(id, itemsCustom); // return "success"; return "forward:queryItems.action"; }
7.測試效果
參考:http://zkliqiang.iteye.com/blog/779285