springmvc上传

一、form表单

       从页面form书写开始,上传文件的form与一般的form书写上有一点小小的差距,具体例子如下:

<form id="uploadForm" enctype="multipart/form-data" method="post">
    <input type="file" name="excelFile" id="file_input"/> 
</form>

首先,在form上有一个特殊的属性enctype="multipart/form-data"。enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

其次,在input标签中,需要上传文件的输入框,其属性为type="file"

二、无跳转的JS书写

        在上传的时候,当我们点击提交之后,一般不希望页面发生跳转,只希望返回上传的结果。那儿如何实现不跳转提交呢?下面是本次项目使用的方式:

function upload() {
	var fm = new FormData($("#uploadForm")[0]);
	//进行Ajax请求
	$.ajax({
	//几个参数需要注意一下
	type: "POST",//方法类型
	dataType: "json",//预期服务器返回的数据类型,可以不设置
	url: "/ndi2.0/sourceManage/uploadExcelData.action" ,//url
	data: fm,
	async: false,  
	cache: false,
	contentType: false, //禁止设置请求类型
	processData: false, //禁止jquery对DAta数据的处理,默认会处理
	success: function (result) {
		console.log(result);//打印服务端返回的数据(调试用)
		if (result.isSuccess) {
			//跳转页面
			//window.location.href="user/personalDesk.action";
			}
		},
		error : function() {
			alert("异常!");
		}
	});
}

    FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。

关于FormData对象的详细介绍:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

三、Java代码的写法

@RequestMapping(value="/uploadExcelData.action",method=RequestMethod.POST)
@ResponseBody
public Map<String,String> uploadExcelData(
		HttpServletResponse response,HttpServletRequest request,
		@RequestParam("excelFile") MultipartFile file,
		@RequestParam("type") String type) {
	Map<String,String> map = new HashMap<String,String>();
	try {
		//获取到上传文件流
		InputStream is = file.getInputStream();
		
		map.put("success", "true");
		map.put("msg", "上传成功");
	} catch (IOException e) {
		e.printStackTrace();
		map.put("success", "fasle");
		map.put("msg", "上传失败,请联系管理员");
	}
	return map;
}

显然,@RequestParam注解中的参数名称需要与表单中的name相同,如果上传的文件,则接收的类型应当为MultipartFile

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值