2012-09-14 18 views
7

Bu komut dosyasını kullanarak, rails 3.2.8 uygulamasında HTML5 FormData ile dosya (tek tek) yüklemek için kullanıyorum.HTML5 FormData dosya yükleme RubyOnRails ile

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

Nasıl bu hatayı çözebilir: Bir dosyayı yüklediğinizde

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

Ama konsolda bu hatayı olsun?

cevap

16

Bu sorunu gördünüz mü? Sending multipart/formdata with jQuery.ajax

Sınır dizesinin eksik olmasına neden olan içerik türü üstbilgileri ekleyerek jQuery'ye koşuyor gibi görünüyorsunuz.

Size aksi halde jQuery sizin için bir İçerik Türü başlığını eklemek değil zorlayarak, false için contentType seçeneğini ayarlamak zorunlu ki, sınır dize ondan eksik olacak: Yukarıda bağlantılı sayısından. Ayrıca bayrağını false olarak ayarlamalısınız, aksi halde jQuery, FormData'nizi bir dizeye dönüştürmeyi deneyecek ve bu da başarısız olacaktır. Buna dayanarak

, bu deneyin: Kendimi bu denemedim

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

, ama bu size :)

+0

aradığımız droidler olabilir şüpheli zaman processData kullanmayın, Geçersiz Davranış alırım. Ancak processData ile: false, raylarda dahili bir sunucu hatası alıyorum. – DGM