2012-09-14 2 views
7

이 스크립트를 사용하여 Rails 3.2.8 응용 프로그램에서 HTML5 FormData로 파일 (하나씩)을 업로드하고 있습니다.RubyOnRails로 HTML5 FormData 파일 업로드

webrick/server.rb:191:in `block in start_thread' ERROR ArgumentError: invalid %-encoding ("filename.jpeg" Content-Type: image/jpeg 

가 어떻게이 오류를 해결할 수 있습니다 : 나는 파일을 업로드 할 때

http://jsfiddle.net/RamPr/

$('.uploader input:file').on('change', function() { 
    $this = $(this); 

    $('.alert').remove(); 

    $.each($this[0].files, function(key, file) { 
    $('.files').append('<li>' + file.name + '</li>'); 

    data = new FormData(); 
    data.append(file.name, file); 

    $.ajax({ 
     url: $('.uploader').attr('action'), 
     contentType: 'multipart/form-data', 
     type: 'POST', 
     dataType: 'json', 
     data: data, 
     processData: false 
    }); 
    }); 
}); 

는하지만, 콘솔에서이 오류가?

답변

16

이 문제는 보셨습니까? Sending multipart/formdata with jQuery.ajax

jQuery에 콘텐츠 유형 헤더를 추가하면 경계 문자열이 누락 될 수 있습니다.

그것은 당신이 그렇지 않으면, jQuery를 당신을 위해 Content-Type 헤더를 추가하지 강제 falsecontentType 옵션을 설정하는 것이 필수적이다가, 경계 문자열이 그것에서 누락됩니다 : 위의 링크 문제에서. 또한 processData 플래그를 false으로 설정해야합니다. 그렇지 않으면 jQuery가 FormData를 문자열로 변환하려고 시도하는데 실패합니다. 그 바탕으로

이 시도 제공 : 나는 자신이 시도하지 않은

$.ajax({ 
    url: $('.uploader').attr('action'), 
    contentType: false, 
    cache: false, 
    processData: false, 
    type: 'POST', 
    dataType: 'json', 
    data: data 
}); 

을하지만, 나는 이것이 당신이 :)

+0

찾고있는 드로이드 생각되는 경우 I processData를 사용하지 않으면 불법 호출이 발생합니다. 그러나 processData : false를 사용하면 레일에 내부 서버 오류가 발생합니다. – DGM

관련 문제