在做javaweb项目时,有时偶尔会用到用户头像上传和预览功能,百度了很多资料,发现学习成本比较高,要么是理解起来有点困难,必须加以深入研究才能吃透,但花费时间花费精力。要么是效果不尽人意。因此本人花了一些时间从前台到后台都是自己手写的,希望大家能满意!

头像上传即文件上传采用springmvc文件上传方案来解决,头像上传通常也需要预览功能,预览功能则通过js代码实现。

前端页面html代码:

<div id="box-1">
	<img id="show-img" src="" alt=""/>
</div>

<div id="box-2">
	<form action="/test_springmvc/user/getFile_2" method="post" enctype="multipart/form-data">
		用户名:<input type="text" name="username"/><br>
		<input id="choose-file" type="file" name="file" accept="image/*"/>
		<input type="submit" value="提交"/>
	</form>
</div>

前端页面css代码:

<style type="text/css">
	
	#box-1{
      width: 200px;
      height: 200px;
      border: 1px solid gray;
      border-radius: 50%;
    }
    img{
      width: 100%;
      height: 100%;
      border-radius: 50%;
      
    }
 
</style>

前端页面js代码:

还要先引入jquery文件

<script type="text/javascript">
	$(function(){
		//在input file内容改变的时候触发事件
	    $('#choose-file').change(function(){
	    	//获取input file的files文件数组;
	    	//$('#filed')获取的是jQuery对象,.get(0)转为原生对象;
	    	//这边默认只能选一个,但是存放形式仍然是数组,所以取第一个元素使用[0];
	      	var file = $('#choose-file').get(0).files[0];
	    	//创建用来读取此文件的对象
	      	var reader = new FileReader();
	    	//使用该对象读取file文件
	      	reader.readAsDataURL(file);
	    	//读取文件成功后执行的方法函数
	      	reader.onload=function(e){
	    		//读取成功后返回的一个参数e,整个的一个进度事件
	        	console.log(e);
	    		//选择所要显示图片的img,要赋值给img的src就是e中target下result里面
	    		//的base64编码格式的地址
	        	$('#show-img').get(0).src = e.target.result;
	      	}
	    });
		
		//隐藏input file控件
		$("#choose-file").hide();
		
		$("#box-1").bind('click',function(){
			//当点击头像框时,就会弹出文件选择对话框
			$("#choose-file").click();
			
		});
		
	});


</script>

后台controller方法代码:

/**
	 * springmvc文件上传:基于servlet3.0的文件上传
	 */
	@RequestMapping("/getFile")
	@ResponseBody
	public String getFile(String username,Part file) {
		//将文件写到d盘根目录
		try {
			
			String s=file.getHeader("Content-Disposition");
			//分析字符串,获取上传的文件名称
			s=s.substring(0,s.length()-1);
			String fileName=s.substring(s.lastIndexOf("\"")+1, s.length());
			
			//保存文件
			file.write("E://TestAll/"+fileName);
			//清楚上传的临时文件
			file.delete();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "文件上传成功!";
	}

效果截图:

未选择头像时:

基于springmvc实现头像上传、预览_springboot

点击头像框,弹出文件选择对话框,选择一张图片后:

基于springmvc实现头像上传、预览_springboot_02

点击提交按钮,即可将头像上传到服务器!