SSM框架上传文件并不刷新页面,并预览图片

效果图:
在这里插入图片描述
Jsp代码(样式自己调):

<img id="HeadImg" src="" data-bd-imgshare-binded="1" style="height: 120px;width: 120px;">
<input type="file" id="SelectTheFile" name="SelectTheFile" hidden>
<a id="SelectThe" href="javascript:;">选择文件</a>

Js代码:

var ImageReader=new FileReader();/// FileReader接口,用于读取文件
    	 //回调函数onLoad异步
            ImageReader.onload = function (evt) {
                $("#HeadImg").attr("src", evt.target.result);//将数据结果赋值给imges的src
            };
            //正则表达式过滤上传的图片类型
            regexImageFilter = /^(?:image\/bmp|image\/png|image\/jpeg|image\/jpg)$/i;
            $("#SelectTheFile").change(function () {
                var imgFile= $("#SelectTheFile").prop('files')[0];//prop添加属性名称
                console.log(imgFile);
                if(imgFile!=undefined){
                	var Type = imgFile.type;
                //加载img标签 ,判断是否是图片类型
                if (!regexImageFilter.test(Type)) {
                    alert("选择的不是图片类型!")
                    $("#SelectTheFile").val("");
                }
                //readAsDataURL()方法可以获取API异步读取的文件数据,另存为数据URL,将该URL绑定到img标签的src属性上,就可以实现图片上传的预览效果
                ImageReader.readAsDataURL(imgFile);
                }
      });

用ajax对表单进行序列化并上传,会出现报以下错
在这里插入图片描述
在这里插入图片描述
原来不仅仅是form的enctype="multipart/form-data"问题,普通的form表单进行序列化只是只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。所以我们需要用FormData的对象。
参考:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/FormData
代码如下:

				//对from表单创建FormData对象
				var oData = new FormData(document.forms.namedItem("UserForm" ));  
				var oReq = new XMLHttpRequest();  
				oReq.open( "POST", "路径" , true );  
				oReq.onload = function(data) {  
				//接收后台传递的参数
				alert(oReq.responseText);
				};  
				oReq.send(oData);  

后台代码如下:

public String ModifyTheUser(@RequestParam(value="input的name",required=true)MultipartFile myfile) throws IOException{
		if (myfile.getSize() > 0) {
			//路径
	        String path = “上传的路径”;
			System.out.println(path);
			//获取文件原名
			String fullName=myfile.getOriginalFilename();
			//获取扩展名称
			String ext=fullName.substring(fullName.lastIndexOf("."));
			//拼接文件保存的名称
			String fileName=System.nanoTime()+ext;
			//保存文件
			FileUtils.writeByteArrayToFile(new File(path, fileName), myfile.getBytes());
		}
		return “”;
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值