最近新的工作要让我把<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) {

          }
  });