2017-05-15 10 views
-2

파일을 업로드하고 API를 통해 파일로 보내려고합니다.하지만 작동하지 않습니다. 여기에 내 업로드 및 API 내 파일을 보내는 데 사용됩니다. 하지만 대부분 오류 메시지가 표시됩니다.자바 스크립트에서 파일을 업로드하고 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.stringifydataFormData 때문에 toJSON() 방법이없는, 그래서 그것은 "{}" 결과 일반 객체로 처리됩니다.

FormData.prototype.toJSON 메서드를 구현하거나 data을 처리기의 문자열 또는 일반 개체로 변환 할 수 있습니다. data의 문자열로 표시된 표현의 형식은 API가 기대하는 바에 따라 전적으로 달라집니다.

+0

지금 코드를 변경했지만 지금은 아약스에 응답하지 않았습니다 – Midhun

+0

@Midhun - 음, 미카엘이 제안한 방식이나 의미있는 방식으로 코드를 변경하지 않았습니다. – Quentin

+0

@Midhun 변경 사항은'data : {file : file}'입니다. 맞습니까? 'file'이라는 변수는 어디에도 선언하지 않으므로 ReferenceError로 스크립트가 충돌하고 AJAX 요청이 수행되지 않습니다. 그리고 Quentin이 지적했듯이, 당신의 변화는 당신의 스크립트로 문제를 해결하는 데 아무런 도움이되지 않습니다. –

관련 문제