2012-09-14 24 views
7

Utilizo este script para cargar archivos (uno por uno) con HTML5 FormData en la aplicación Rails 3.2.8.Carga de archivos HTML5 FormData con 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 
    }); 
    }); 
}); 

Pero cuando subo un archivo, me sale este error en la consola:

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

¿Cómo puedo solucionar este error?

Respuesta

16

Ha visto a este tema? Sending multipart/formdata with jQuery.ajax

Parece que se está ejecutando en jQuery agregar encabezados de tipo de contenido, lo que hace que la cadena de límite sea faltante. Del tema vinculado anteriormente:

Es imperativo que se establece la opción contentType-false, obligando a jQuery no añadir una cabecera Content-Type para que, de otro modo, la serie de límite no aparecerán en él. Además, debe abandonar el conjunto processData bandera para false, de lo contrario, jQuery tratará de convertir sus FormData en una cadena, que se producirá un error.

Basado en esto, le daría prueba:

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

No he probado esto por mí mismo, pero sospecho que esto podría ser los robots que está buscando para :)

+0

Cuando no use processData, recibo una invocación ilegal. Pero con processData: falso, recibo un error interno del servidor en los rieles. – DGM

Cuestiones relacionadas