用form表單提交方式上傳圖片到伺服器
springMVC為檔案上傳提供了直接的支援,這種支援是通過MultipartResolver實現的,實現類為CommonsMultipartResovler.
依賴:commons-fileupload-1.2.jar commons-io-1.3.2.jar
普通的檔案上傳:
1.配置虛擬目錄
在eclipse中的Tomcat中配置圖片虛擬目錄(模擬圖片伺服器),訪問http://localhost:8080/pic/xxx.jpg即可訪問到虛擬目錄(圖片伺服器)下的圖片。
如下圖:
複製一張圖片到存放圖片的資料夾,使用瀏覽器訪問
測試效果,如下圖:
2.加入jar包
實現圖片上傳需要加入的jar包,如下圖:
下載地址:https://download.csdn.net/download/weixin_39556885/9928690
https://download.csdn.net/download/huoniuyi1230/10111679
把兩個jar包放到工程的lib資料夾中
3.配置上傳解析器
在springmvc.xml中配置檔案上傳解析器
<!-- 檔案上傳,id必須設定為multipartResolver -->
<
bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- UTF-8必須和pageEncoding屬性一直 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 設定檔案上傳大小 -->
<
property name="maxUploadSize" value="5000000" /></bean>
4.jsp頁面修改
必須將表單的method設定為POST,並將enctype設定為multipart/form-data。只有在這樣的情況下,瀏覽器才會把使用者選擇的檔案以二進位制資料傳送給伺服器。
enctype="multipart/form-data"
5.圖片上傳
在更新商品方法中新增圖片上傳邏輯 controller
/**
* 更新商品
* @param item
* @return
* @throws Exception
*/
@RequestMapping("updateItem")
public String updateItemById(Item item, MultipartFile pictureFile) throws Exception {
// 設定圖片名稱,不能重複,可以使用uuid
String picName = UUID.randomUUID().toString();
// 獲取檔名
String oriName = pictureFile.getOriginalFilename();
// 獲取圖片字尾
String extName = oriName.substring(oriName.lastIndexOf("."));
// 開始上傳
pictureFile.transferTo(new File("C:/upload/image/" + picName + extName));
// 設定圖片名到商品中
item.setPic(picName + extName);
// ---------------------------------------------
// 更新商品
this.itemService.updateItemById(item);
return "forward:/itemEdit.action";
}
效果,如下圖:
ajax檔案上傳:
如果form表單的資料大,form表單和圖片一起上傳,會相互影響,降低上傳的效率,因此我們可以把圖片做成非同步上傳。
1.jsp:
2.controller:
MultipartFile物件的常用方法:
- byte[] getBytes():獲取檔案資料
- String getContentType[]:獲取檔案MIME型別,如image/jpeg等
- InputStream getInputStream():獲取檔案流
- String getName():獲取表單中檔案元件的名字
- String getOriginalFilename():獲取上傳檔案的原名
- Long getSize():獲取檔案的位元組大小,單位為byte
- boolean isEmpty():是否有上傳檔案
- void transferTo(File dest):將上傳檔案儲存到一個目錄檔案中
檔案型別有:
圖片:image/jpeg
image/png
image/gif
txt:text/plain
ppt:application/vnd.ms-powerpoint
excel:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
word:application/vnd.openxmlformats-officedocument.wordprocessingml.document