- 在工程依賴庫下添加文件上傳jar包
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
2.jsp頁面設置form表單屬性enctype
在表單中上傳圖片時,需要在form的屬性設置中添加enctype="multipart/form-data"。
[html] view plain copy
<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進制的方式傳過去。
- springMVC.xml添加multipart類型解析器
在頁面form中提交enctype="multipart/form-data"的數據時,需要springmvc對multipart類型的數據進行解析,需要在springmvc.xml中配置multipart類型解析器。
[html] view plain copy
<!-- 文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設置上傳文件的最大尺寸為5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
4.創建圖片虛擬目錄,以存放圖片
eclipse IDE 通過界面進行配置:servers -->Tomcat v8.0 Server at localhost--> 雙擊,選擇-->add external web modules.
在圖片虛擬目錄中,一定將圖片目錄分級創建(提高i/o性能),一般我們采用按日期(年、月、日)進行分級創建。
- jsp 頁面,設置圖片顯示的位置和大小。
[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>
- Controller 類方法中寫相應的方法
<1, 方法的參數中添加MultipartFile items_pic行參 這個跟頁面的圖片的參數名字是一致的;
<2, 為了避免文件名稱相同而沖突,使用UUID.randomUUID()產生一個隨機的數值作為名稱;
❤️. 將圖片數據寫入磁盤: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.測試效果
