2012-09-14 18 views
7

Ich benutze dieses Skript, um Datei (eins nach dem anderen) mit HTML5 FormData in Rails 3.2.8 Anwendung hochzuladen.HTML5 FormData Dateiupload mit 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 
    }); 
    }); 
}); 

Aber wenn ich eine Datei hochladen, erhalte ich diesen Fehler in der Konsole:

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

Wie kann ich diesen Fehler beheben?

Antwort

16

Kennen Sie dieses Problem? Sending multipart/formdata with jQuery.ajax

Es sieht so aus, als ob Sie möglicherweise in jQuery hineinlaufen, wenn Sie Header vom Typ content-type hinzufügen, wodurch die Begrenzungszeichenfolge fehlt. Aus der oben verlinkten Ausgabe:

Es ist zwingend notwendig, dass Sie die contentType Option false gesetzt und zwingen jQuery keine Content-Type-Header für Sie hinzufügen, andernfalls wird die Grenze Zeichenfolge von ihm fehlen. Außerdem müssen Sie das Flag processData auf false setzen, andernfalls versucht jQuery, Ihre FormData in eine Zeichenfolge zu konvertieren, die fehlschlägt.

auf dieser Grundlage, geben diesem einen Versuch:

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

ich das selbst noch nicht ausprobiert, aber ich vermute, das die Droiden sein könnten Sie für :)

+0

suchen Wenn ich benutze keine processData, ich bekomme Illegal Invocation. Aber mit processData: false bekomme ich einen internen Serverfehler in Rails. – DGM