2016-09-15 3 views
0

일부 양식 데이터 및 파일을 REST 끝점에 업로드하려고합니다. 다음 코드를 작성했습니다 -FormData 파일 + 데이터를 보낼 수

$(document).ready(function() { 

    var data = new FormData(); 

    //upload file append to formdata 
    $("#catItemData #uploadC").on('change', function(){ 
      $this = $(this); 
      var file = $this[0].files[0]; 
      data.append("xlsx",file);    

//input fields append to formdata 
    $("#catItemData #catSubmit").click(function(){ 
     var formD = { 
       name: $("#name").val(), 
       type: $("#type").val() 
     }; 
     for (var key in formD) { 
      data.append(key, formD[key]); 
     }  
     $.ajax({    
       type: "POST", 
       url: "http://localhost:8086/service/create",   
       data: data, 
       contentType: false, 
       cache: false, 
       processData: false, 
       success: function(response, status, xhr) { 
         //response 
        } 
       }); 
     }); 
    }); 

그러나 이것은 파일 내용을 업로드하지 않으며 415 지원되지 않는 미디어 유형 오류를 제공합니다. 페이로드는 다음과 같이 표시됩니다. -

------ WebKitFormBoundaryANhANgazbC1YNo1u Content-Disposition : form-data; 이름 = "xlsx"; 파일 이름 = "testfile.xlsx" 콘텐츠 형식 : 응용 프로그램/vnd.openxmlformats-officedocument.spreadsheetml.sheet

------ WebKitFormBoundaryANhANgazbC1YNo1u 내용 - 처리 : 폼 데이터; 이름 = "이름"

헬로

------ WebKitFormBoundaryANhANgazbC1YNo1u 내용 - 처리 : 폼 데이터;

나는 아마도 무슨 이름 = "유형"

플랫폼을 놓친 거지? 어떤 도움을 주셔서 감사합니다.

+0

REST 엔드 포인트는 해당 파일 형식을 인식하지 못합니다. – Barmar

+0

[Jquery form] (http://malsup.com/jquery/form/)을 사용하지 않는 이유는 무엇입니까? –

+0

나는 명령 프롬프트를 사용하여 백엔드를 테스트했으며 즉시 번거 로움없이 Excel 파일을 업로드했습니다. 파일에 대한 콘텐츠 형식을 수정해야만 할 수 있습니까? 백엔드는 다중 파트/양식 데이터 및 응용 프로그램/옥텟 스트림 유형의 컨텐트를 처리 할 수 ​​있습니다. – rnaikzz

답변

1

data 변수를 선언해야합니다. 해당 파일의 변경에 대한 유효성 검사가 없으면 파일 입력시 change 이벤트가 필요하지 않습니다. 클릭 기능에서 var formD의 필요 없음. 간단하게 코드는 이렇게되어야합니다.

$(document).ready(function() { 



    $("#catItemData #catSubmit").click(function(){ 
     var data = new FormData(); 
     data.append('name', $("#name").val()); 
     data.append('type', $("#type").val()); 
     data.append("xlsx",$('#uploadC')[0].files[0]); 
     $.ajax({    
       type: "POST", 
       url: "http://localhost:8086/service/create",   
       data: data, 
       contentType: false, 
       cache: false, 
       processData: false, 
       success: function(response, status, xhr) { 
         //response 
        } 
       }); 
     }); 
    }); 
+0

감사합니다. 또한 class = "input-file"을 파일 입력에 추가하여 처리 할 파일의 데이터를 가져와야했습니다. – rnaikzz

관련 문제