springmvc學習筆記(17)-上傳圖片
標籤: springmvc
本文展示如何在springmvc中上傳圖片
springmvc中對多部件類型解析
在修改商品頁面,添加上傳商品圖片功能。
在頁面form中提交enctype="multipart/form-data"
的數據時,需要springmvc對multipart類型的數據進行解析。
在springmvc.xml中配置multipart類型解析器。
<!-- 文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設置上傳文件的最大尺寸爲5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
加入上傳圖片的jar
添加依賴
<!-- 文件上傳 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
依賴樹
[INFO] \- commons-fileupload:commons-fileupload:jar:1.3.1:compile
[INFO] \- commons-io:commons-io:jar:2.2:compile
可以看到,其實還間接依賴了commons-io:commons-io:jar
創建圖片虛擬目錄存儲圖片
參考我之前的博文
也可以直接修改tomcat的配置,在conf/server.xml文件,添加虛擬目錄.
注意:在圖片虛擬目錄中,一定將圖片目錄分級創建(提高i/o性能),一般我們採用按日期(年、月、日)進行分級創建。
上傳圖片代碼
- 頁面
<tr>
<td>商品圖片</td>
<td>
<c:if test="${items.pic !=null}">
<img src="/pic/${items.pic}" width=100 height=100/>
<br/>
</c:if>
<input type="file" name="items_pic"/>
</td>
</tr>
- controller方法
修改:商品修改controller方法:
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(
Model model,
HttpServletRequest request,
Integer id,
@ModelAttribute("items")
@Validated(value = ValidGroup1.class)ItemsCustom itemsCustom,
BindingResult bindingResult,
MultipartFile items_pic
)throws Exception {
//原始名稱
String originalFilename = items_pic.getOriginalFilename();
//上傳圖片
if(items_pic!=null && originalFilename!=null && originalFilename.length()>0){
//存儲圖片的物理路徑
String pic_path = "D:\\tmp\\";
//新的圖片名稱
String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
//新圖片
File newFile = new File(pic_path+newFileName);
//將內存中的數據寫入磁盤
items_pic.transferTo(newFile);
//將新圖片名稱寫到itemsCustom中
itemsCustom.setPic(newFileName);
}