最近新的工作要让我把<input type="file">下的一个excel文件传到后台处理,我一看那还不是小菜一碟。可是没想到中途ajax就是没有办法把fromdata对象传到后台。
我在后台用MultipartFile类承接这个excel,一直在报错,主要有两种,一个是"the current request is not a multipart request",一个就是后台始终接收不到文件,即MultipartFile实例一直是null。
首先是第一个,我是用FromData对象模拟from表单提交,所以没有在from标签属性设置。就像下方那样的。
<form id="myform" class="form-horizontal" method="post" enctype="multipart/form-data">
但是一直传不到后台去,查看请求头,才发现 content-type是application/json,查了很多都是说jquery版本太低,公司重新改写了不少jquery的方法,我也没办法随意更换jquery,于是我把ajax的请求方法设为:
$.ajax({ type:'POST', url :xxxxxxx, data:formData, processData: false, contentType:multipart/form-data", dataType:"json", success:function (resultinfo) {}});
但是这样一搞,到时不报错了,就出现了后台MultipartFile实例一直是null的问题。
我本来是不想写from标签的,但是这么一搞那也没办法了,于是我加上一个from标签吗,同时属性设置为enctype="multipart/form-data",再把ajax里面改为contentType:false",
但是后台还是一直报错null
说实话我是第一次用MultipartFile类,网上查来查去就是那些个原因,一点用都没有,我都要放弃使用MultipartFile类了。就扫到一个帖子说input name属性要和后台MultipartFile实例参数一致。
淦。。。。。试了试,果然成功了,至此已经浪费我四五个小时的时间了,解决之后那我就可以愉快的摸鱼了,前端代码ajax如下:
var oFiles = document.querySelector("#myform"); var formData = new FormData(oFiles); $.ajax({ type:'POST', url:xxxxxxxxxxxxxx, data:formData, processData: false,//不操作数据 cache:false,//不存缓存 contentType: false,//格式默认 mimeType:"multipart/form-data",//没啥用,心理安慰 dataType:"json", success:function (resultinfo) { } });