2017-05-15 57 views
-2

我試圖上傳文件並通過api作爲文件發送,但沒有正常工作。這裏是我用於上傳併發送我的文件到API。 但它最有可能是錯誤信息。在javascript中上傳文件並通過api發送文件

$(document).on('change', '#txtUploadFile', function(e){ 

    var files = e.target.files; 
    if (files.length > 0) { 
     if (this.value.lastIndexOf('.xlsx') === -1){ 
      alert('Only ods files are allowed!'); 
      this.value = ''; 
      return; 
     } 
     if (window.FormData !== undefined) { 
      var data = new FormData(); 
      for (var x = 0; x < files.length; x++){ 
       data.append("file" + x, files[x]); 
      } 

      $.ajax({ 
       type: "POST", 
       contentType: "multipart/form-data", 
       url: 'http://localhost/clicportaltest/rest/clicadmin/uploadExcel', 

       data:{file:file}, 
       success: function(result) { 
        console.log(result); 
       }, 
       error: function (xhr, status, p3, p4){ 
        var err = "Error " + " " + status + " " + p3 + " " + p4; 
        if (xhr.responseText && xhr.responseText[0] == "{") 
         err = JSON.parse(xhr.responseText).Message; 
         console.log(err); 
        } 
       }); 
     } else { 
      alert("This browser doesn't support HTML5 file uploads!"); 
      } 
    } 
}); 
+0

你得到的錯誤信息是什麼? – Sventies

+0

您如何期望將您的文件編碼爲JSON?或者說,服務器期望文件的格式是什麼? – Quentin

+1

您曾經說過您要發送JSON,而不是說您要發送多部分表單數據(其餘代碼沒有這樣做)。代碼不會編譯(它看起來像你改變了你的想法,使變量名稱複數中途)。你一直在編輯代碼,但是你還沒有告訴我們你發佈數據的HTTP端點以什麼格式期待數據進入。 – Quentin

回答

0
$(function(){ 
$('#submitUpload').on('click', function(){ 
    var file = document.getElementById("upload").files[0]; 
    var form = new FormData(); 
    form.append("file", file); 

    var settings = { 
     "async": true, 
     "crossDomain": true, 
     "url": "http://localhost/clicportaltest/rest/clicadmin/uploadExcel", 
     "method": "POST", 
     "processData": false, 
     "contentType": false, 
     "mimeType": "multipart/form-data", 
     "data": form 
    }; 

    $.ajax(settings).done(function (response) { 
     console.log(response); 
    }); 
    }); 
}); 
0

不能JSON.stringifydata因爲FormData不具有toJSON()方法,所以它被當作一個普通的對象,這導致"{}"

您可以實現自己的FormData.prototype.toJSON方法,或者只是將data轉換爲處理程序中的字符串或普通對象。如何格式化data的字符串化表示完全取決於API預期的方式。

+0

我現在改變了代碼,但是現在沒有響應ajax – Midhun

+0

@Midhun - 好的,你還沒有以有意義的方式或以Mikael建議的方式更改代碼。 – Quentin

+0

@Midhun你的改變是'data:{file:file}',對吧?您不要在任何地方聲明一個名爲'file'的變量,這樣您的腳本就會崩潰並引發ReferenceError,AJAX請求也不會執行。正如Quentin指出的那樣,您的更改對您的腳本無法解決問題。 –