关于

使用ajax进行文件上传时,若设置contentTypemultipart/form-data或没有设置processDatafalse,会发现后台是无法解析文件的.

写法

  1. html
     <div>
         <form method="post" enctype="multipart/form-data">
             选择文件:<input type="file" name="uploadFile" id="uploadFile" /><br />
                   <input type="button" id="upload" value="上传" />
         </form>
     </div>
    
  2. js
    $(function() {
     $("#upload").click(function() {
         var formData = new FormData();
         formData.append("uploadFile", document.getElementById("uploadFile").files[0]);
         $.ajax({
             url : "/system/freeImport",
             type : "POST",
             data : formData,
             /**
             *必须false才会自动加上正确的Content-Type
             */
             contentType : false,
             /**
             * 必须false才会避开jQuery对 formdata 的默认处理
             * XMLHttpRequest会对 formdata 进行正确的处理
             */
             processData : false,
             success : function(data) {
                 console.log('data:%o', data);
                 if (data.success) {
                     alert(data.data);
                 } else {
                     alert(data.message);
                 }
             },
             error : function() {
                 alert("上传失败!");
             }
         });
     });
    });
    

    参考

浅谈contentType = false