2017-10-06 3 views
0

ajax로 양식 데이터를 사용하여 이미지를 업로드하려고합니다. 아래 줄은 잘 작동하고 내 로컬 컴퓨터에 이미지를 저장하는 것 같습니다. ajax를 사용하여 파일 업로드 용 formdata 보내기

<form ref='uploadForm' id='uploadForm' action='/tab10/uploadImage' method='post' encType="multipart/form-data"> 
<input type="file" class="btn btn-default" name="file" /> 
<input type='submit' class="btn btn-default" value='Broadcast Image' /> 
</form> 

하지만 그 대신 양식 속성으로 동작을 지정하는, 내가 아약스를 사용하여 전화를 걸 때, 일이 fine.Below을 작동하는 것 같지 않았다 내가 포스트 API를 만들기 위해 사용하고있는 코드입니다 ajax를 사용하여 호출하십시오.

HTML

<form ref='uploadForm' id='uploadForm' encType="multipart/form-data"> 

JQuery와는

$("form#uploadForm").submit(function (event) { 
      //disable the default form submission 
      event.preventDefault(); 
      var formData = $(this).serialize(); 
      console.log(formData); 
      $.ajax({ 
       url: '/tab10/uploadImage', 
       type: 'POST', 
       data: formData, 
       async: false, 
       cache: false, 
       contentType: false, 
       processData: false, 
       success: function() { 
        alert('Form Submitted!'); 
       }, 
       error: function(){ 
        alert("error in ajax form submission"); 
       } 
      }); 
      return false; 
     }); 

아래는 내가 이미지를 저장하기 위해 사용하고있는 코드입니다.

난 내 uploadimage 기능의 요청 데이터를 확인
exports.uploadImage = function(req, resp) { 
var res = {}; 
let file = req.files.file; 
file.mv('./images/image', function(err) { 
if (err) { 
    res.status = 500; 
    res.message = err; 
    // return res.status(500).send(err); 
    return resp.send(res); 
} 
res.status = 200; 
res.message = 'File uploaded!'; 
return resp.send(res); 
}); 
}; 

, 요청에 "파일"이라는 매개 변수가 후자의 경우에 전송되지 않는 것으로 보인다.

+0

전체 URL을 사용해보세요. –

+0

FYI :'async : false,'* 주 스레드의 동기 요청은 사용되지 않습니다. * - 회피하십시오. –

+0

'매개 변수는 "파일"이 나중에 나올 때 보내지 않습니다. "폼을 보지 않으면 참된 신비가됩니다. –

답변

1

사용

$("#uploadForm").submit(function() { 
     var formData = new FormData(this); 
     $.ajax({ 
      url: '/tab10/uploadImage', 
      type: 'POST', 
      data: formData, 
      async: false, 
      cache: false, 
      contentType: false, 
      processData: false, 
      success: function() { 
       alert('Form Submitted!'); 
      }, 
      error: function(){ 
       alert("error in ajax form submission"); 
      } 
     }); 
     return false; 
    }); 
+1

고마워요 ... 오랫동안 그걸로 고생하고있었습니다 .... 내가 왜 작동하지 않는 이유가 무엇인지에 대한 논리를 간단히 설명해 주시겠습니까? –

+0

새로운 FormData (this); // formData를 지정하지 않았습니다. –

0

나는 당신이 formData에 파일을 추가 할 수 있습니다 후, FormData을 만들 입력 <input type="file" class="btn btn-default" name="file" id="uploadFile"/>

$("form#uploadForm").submit(function (event) { 
     //disable the default form submission 
     event.preventDefault(); 
     var formData = new FormData(); 
     formData.append('file',$('#uploadFile')[0].files[0]); 
     $.ajax({ 
      url: '/tab10/uploadImage', 
      type: 'POST', 
      data: formData, 
      contentType: false, 
      processData: false, 
      success: function() { 
       alert('Form Submitted!'); 
      }, 
      error: function(){ 
       alert("error in ajax form submission"); 
      } 
     }); 

    }); 
+0

이것 역시 작동하지 않는 것 같습니다. 이 경우 파일을 이동하는 데 필요한 정보입니다. {file : {name : 'images.png', data : , 인코딩 : '7bit', mimetype : 'image/png', mv : [Function : mv]}} req 변수 자체에 들어 있습니다. 그러나이 경우에는 이미지의 이름과 같은 기본 정보 만 얻습니다. –

+0

죄송합니다. 나는 'formData.append ('file ', $ ('# uploadFile ') [0] .files [0]);'한 파일을 가져와야 할 때 내 대답을 편집했습니다. 여러 파일을 업로드하여 루프를 만들어야합니다 – OLH

0

를 사용하여 화재로이 형식 아약스에 ID를 추가 할 수 있다고 생각 파일이 멀티 파트 또는 jquery이기 때문에 serialize() 메서드는 멀티 파트 콘텐츠를 serialize하지 않으므로 수동으로 설정해야합니다.

//get choosen file 
var fileContent = new FormData(); 
fileContent.append("file",$('input[type=file]')[0].files[0]); 
$.ajax({ 
    type: "POST", 
     enctype:"multipart/form-data", 
     url: "/tab10/uploadImage", 
     data: fileContent, 
     processData: false, 
     contentType: false, 
     success: function(response) { 
     } 
});