在閱讀網上衆多資源後,發現SpringMVC上傳的資料非常雜亂,沒有一個能解決問題。
今天自己實踐了一次,把經驗分享給大家。
本人也是菜鳥,還請大神多多指點.......
1.SpringMVC使用的是commons-fileupload實現文件上傳
所以要引入commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar。這兩個jar包是必要的。
2.在applicationContext.xml中配置multipartResolver
<!-- 下載組件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="2048000"></property>
<property name="uploadTempDir" value="resources/img/user"></property>
</bean>
3.在Controller的方法中添加MultipartFile參數。該參數用於接收表單中file組件的內容
/**
* 上傳頭像接口
*
* @param userPerson
* @return
*/
@RequestMapping(value = "/upload",method = RequestMethod.POST)
@ResponseBody
public String fileUpload(
@RequestParam(value = "userId", required = true) Long userId,
@RequestParam("file") MultipartFile file,
HttpServletRequest request) {
ReturnData<UserPerson> returnData = new ReturnData<UserPerson>();
if (!file.isEmpty()) {
try {
if(userId!=null){
UserPerson userperson = baseService.getById(UserPerson.class, userId);
// 文件保存路徑
String filePath = request.getSession().getServletContext().getRealPath("/") + "resources/img/user/"
+ file.getOriginalFilename();
// 轉存文件
file.transferTo(new File(filePath));
//上傳的文件名
String filename=file.getOriginalFilename();
//文件的擴張名
String extensionName = filename.substring(filename.lastIndexOf(".") + 1);
//得到新的文件名
String newFileName = "resources/img/user/"+String.valueOf(userperson.getId())+"."+extensionName;
userperson.setImageUrl(newFileName);
baseService.update(userperson);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return Jacksons.me().readAsString(returnData);//這是返回的是一個字符串,使用到Jacksons.me()組件
}
這個是我用來實現頭像上傳的並改名存到數據庫中
4.編寫前臺表單。注意enctype="multipart/form-data"以及<input type="file" name="****"/>
<form action="<%=basePath%>userPerson/upload" method="post" enctype="multipart/form-data">
選擇文件:<input type="file" name="file">
<input type="submit" value="提交">
</form>
就這些,自己理解下應該沒什麼問題....希望對大家有用