2013-12-16 44 views
4

這裏上傳的文件是我的jQuery片段「沒有多邊界發現」異常而使用jQuery的Ajax

$("#uploadForm").submit(function (e) { 
    $.ajax({ 
     url: 'uploadExcel', 
     data: $('#uploadForm').serialize(), 
     cache: false, 
     contentType: 'multipart/form-data', 
     processData: false, 
     type: 'POST', 
     success: function (data) { 
      alert(data); 
     } 
    }); 

在上傳該文件我得到以下錯誤

org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found 
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:931) 
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331) 
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349) 
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) 
    at com.obs.controller.ExcelUploadController.doPost(ExcelUploadController.java:36) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

的原因是什麼?如何克服?

回答

5

其原因XMLHttpRequest 1不支持文件上傳,看到這個問題:jQuery Ajax File Upload。您在服務器端收到錯誤消息,因爲您要求服務器期望進行多段上傳,但由於沒有與它一起發送有效負載(=數據),因此會引發錯誤。

你需要FormDataXMLHttpRequest 2(當心:。只有IE10及以上的所有其他瀏覽器已經支持它詳細的支持信息Can I Use?)。

看來FormData可以emulated in older browsers,雖然我沒有帶親自試過。

隨着XMLHttpRequest 2FormData,您的代碼將這樣的工作:

$("#uploadForm").submit(function (e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: 'upload.ajax.php', 
     data: new FormData($(this)[0]), 
     cache: false, 
     contentType: false, 
     processData: false, 
     type: 'POST', 
     success: function (data) { 
      console.log(data); 
     } 
    }); 
}); 
0

對於我來說,這個問題是包裹在表單/輸入文件中的圖像。我是新的JavaScript/JQuery中,所以這真的很痛苦。我知道我的服務器端是好的,因爲我寫了一個簡單的html表單,它運行良好。我在做這個新的網頁使用JavaScript來預覽圖像,我得到了 「無邊界多發現」異常。

我找到了答案,這here在StackOverflow上,這要歸功於chandoo

試試這個: 如果窗體的ID是 「upload_form」。

var formData = new FormData($('#upload_form')[0]); 
formData.append('tax_file', $('input[type=file]')[0].files[0]); 

$.ajax({ 
    url: 'uploadExcel', 
    data: formData, 
    cache: false, 
    contentType: false, //using 'multipart/form-data' didn't work for me 
    processData: false, //this is also important when you are dealing with files. 
    type: 'POST', 
    success: function (data) { 
     alert(data); 
    } 
}); 

好看!