(比较小的文件可以考虑通过base64方法进行存储和取出,这里考虑常用的普通方法)
1.首先添加对应的maven依赖
<!-- 上传文件相关 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2.配置spring-mvc.xml文件
<!-- 上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
<!-- 最大内存大小 -->
<property name="maxInMemorySize" value="10240"/>
<!-- 最大文件大小,-1为不限制大小 -->
<property name="maxUploadSize" value="-1"/>
</bean>
3.jsp页面代码(不要忘记在最上面添加jquery.js文件)
<!-- 上传员工头像 -->
<form action="uploadPortrait" method="POST" enctype="multipart/form-data">
<input type="file" name="file" onchange="uploadFile(this)" ><br/>
<input type="hidden" id="filename"/>
<input type="text" id="warn_info" size="25" style="display:none;color:red;" value="图片格式不正确(支持png,jpg,jpeg)" disabled/>
<input type="submit" value="上传" id="subBtn" disabled/>
</form>
<script type="text/javascript">
function uploadFile(obj) {
// $('#filename').attr("value", obj.files[0].name); //获取文件名,留着以后
// $('#filepath').attr("value", obj.files[0].name); //获取文件路径
var suffix = obj.files[0].type.split('/')[1]; //获取文件后缀
if("png"==suffix||"jpg"==suffix||"jpeg"==suffix){
$("#warn_info").css("display","none");
$("#subBtn").removeAttr("disabled"); //移除disabled属性
}else{
$("#warn_info").css("display","block");
$("#subBtn").attr("disabled","true"); //移除disabled属性
}
}
</script>
4.controller代码
@RequestMapping(value="/uploadPortrait")
public String uploadPic(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
//指定ID的员工上传头像
Employee employee = (Employee)request.getSession().getAttribute("logined_employee");
String id = employee.getId(); //获取登录用户的id
//判断文件是否为空
if(!file.isEmpty()) {
//文件保存路径
String uuid = UUID.randomUUID().toString();//随机生成uuid
String fileOriginalFilename = file.getOriginalFilename();
String[] split = fileOriginalFilename.split("\\.");
String newFileName =uuid+"."+split[1];//将名称进行分割,只要后缀名
String filePath = request.getSession().getServletContext().getRealPath("/")+"portrait/"+newFileName;
int result = employeeService.updatePortraitById(id,newFileName);
//转存文件
System.out.println(result);
try {
file.transferTo(new File(filePath));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "loginResult";
}
5.mapper代码
int updatePortraitById(String id,String fileName);
对应的xml文件(这里方法传递了两个参数,所以用的下面的语法,之所以没有直接用实体类型,是因为这两个参数仅仅是实体的两个参数,不是所有参数)
<insert id="updatePortraitById">
update employee
set employeeportrait = #{arg1} where id = #{arg0}
</insert>
6.记得在webapp下面创建一个名为portrait的文件夹