SSM框架上传文件功能的实现详解

(比较小的文件可以考虑通过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的文件夹

猜你喜欢

转载自blog.csdn.net/zhaoyy0513/article/details/88572461