SSM文件上传

之前想做一个更换用户头像的功能,需要用到文件上传,在网上学习的时候踩了许多坑,最后总结出来成功的方法记录一下

说是SSM的文件上传功能,其实是基于SpringMVC的文件上传功能

此外还有传统的文件上传,跨服务器的文件上传,留待后续实践。

1.添加依赖,或者jar包

我是基于maven的项目,所以就直接添加依赖了

	<dependency>  
         <groupId>commons-fileupload</groupId>  
         <artifactId>commons-fileupload</artifactId>  
         <version>1.3.1</version>  
	</dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

2.再springmvc配置文件中配置文件解析器

	<!-- 定义文件上传解析器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	    <!-- 设定默认编码 -->
	    <property name="defaultEncoding" value="UTF-8"></property>
	    <!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
	    <property name="maxUploadSize" value="5242880"></property>
	</bean>

文件解析器的id是固定的,不要随意改变,此外还有一些属性可以配置,这里没有写出来,需要的可以自己再配

3.jsp中创建表单

		<form enctype="multipart/form-data" method="post" id="upload">
			<input type="file" name="uploadFile" id="uploadFile"/>
			<input type="button" id="btn" value="上传"/>
		</form>

要上传文件,表单的enctype必须为multipart/form-data,method为post

 

4.写jq

$("#btn").click(function(){
		var formdata=new FormData();
		formdata.append("uploadFile",$('#uploadFile')[0].files[0])
		console.log(formdata.get("uploadFile"));
		
		$.ajax({
			url:"testUpImage",
			data:formdata,
			type:"post",
			dataType:"json",
			processData:false,
			contentType:false,
			success:function(json){
				if(json.code==100){
					alert("上传成功");
				}else{
					alert(json.code);
				}
				},
			error:function(){
				alert("上传出错");
			}
			})

		})

 

5.controller

这个picname是自定义的文件名字,需要的话在jsp中加个input框就好
@RequestMapping(value="/testUpImage",method=RequestMethod.POST)
	@ResponseBody
	public Msg testUpImage(String picname,
            MultipartFile uploadFile,
            HttpServletRequest request) throws Exception {

		// 定义文件名
		String fileName = "";
		
		// 1. 获取原始文件名
		String uploadFileName = uploadFile.getOriginalFilename();
		
		// 2. 截取文件扩展名
		String extendName = uploadFileName.substring(
		uploadFileName.lastIndexOf(".") + 1
		);
		
		// 3. 把文件加上随机数,方式文件重复
		String uuid = UUID.randomUUID().toString()
		.replace("-", "")
		.toUpperCase();
		
		// 4. 判断是否输入了文件名
		if(!StringUtils.isEmpty(picname)) {
		fileName = uuid + "_" + picname + "." + extendName;
		} else {
		fileName = uuid + "_" + uploadFileName;
		}
		System.out.println(fileName);
		
		// 获取文件路径
		ServletContext context = request.getServletContext();
		String basePath = context.getRealPath("/uploads");
		
		// 解决同一文件夹中文件过多问题
		String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
		
		// 判断路径是否存在: 发布的路径,并不是工作空间的路径!
		String realPath = basePath + "/" + datePath;
		System.out.println("真实路径:" + realPath);
		File file = new File(realPath);
		if(!file.exists()) {
		file.mkdirs();
		}
		
		// 使用MultipartFile接口中的方法,把上传的文件写到指定位置
		uploadFile.transferTo(new File(file, fileName));
		System.out.println(file+fileName);
		return Msg.success();
	}
		

6.查看是否上传成功

我在控制台输出了文件路径

D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\kygl\uploads\2020-02-2106021E9730E64433B7201C8559EEE0C7_plane.png

找到文件夹看看

文件上传成功了 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值