2012-09-14 18 views
7

Używam tego skryptu do przesyłania pliku (jeden po drugim) za pomocą formularza HTML5 FormData w aplikacji Rails 3.2.8.Przesyłanie pliku formularza HTML5 za pomocą RubyOnRails

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 
    }); 
    }); 
}); 

Ale kiedy przesłać plik, otrzymuję ten błąd w konsoli:

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

Jak mogę rozwiązać ten problem?

Odpowiedz

16

Czy widziałeś ten problem? Sending multipart/formdata with jQuery.ajax

Wygląda na to, że możesz uruchomić jQuery dodając nagłówki typu treści, co powoduje, że brakuje ciągów znaków. Z powyższego połączonego wydania:

Jest to konieczne, aby ustawić opcję contentType do false, zmuszając jQuery nie dodać nagłówek Content-Type dla ciebie, w przeciwnym razie łańcuch granica będzie brakować od niego. Ponadto należy pozostawić flagę processData ustawioną na false, w przeciwnym razie jQuery spróbuje przekształcić dane formularza w ciąg znaków, który zakończy się niepowodzeniem.

Na tej podstawie, spróbuj tego:

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

nie próbowałem ten sam, ale podejrzewam, że to może być droidy których szukasz :)

+0

Kiedy nie używaj processData, otrzymuję nielegalną inwokację. Ale z processData: false, otrzymuję wewnętrzny błąd serwera w szynach. – DGM

Powiązane problemy