2012-09-14 17 views
7

このスクリプトを使用して、Rails 3.2.8アプリケーションでHTML5 FormDataを使用してファイルを1つずつアップロードします。RubyOnRailsでHTML5 FormDataファイルをアップロード

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

しかし、私はファイルをアップロードするとき、私はコンソールにこのエラーが表示されます。

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

どのように私はこのエラーを解決することができますか?

答えて

16

この問題が発生しましたか? Sending multipart/formdata with jQuery.ajax

jQueryにコンテンツタイプのヘッダーを追加すると、境界文字列が表示されない可能性があります。上記のリンクの問題から:

それはあなたがそうでなければ、あなたのためのContent-Typeヘッダを追加しないようにjQueryを強制的に、falsecontentTypeオプションを設定することが不可欠だ、境界文字列は、それから失われます。また、processDataフラグをfalseに設定する必要があります。そうしないと、jQueryはFormDataを文字列に変換しようとしますが、これは失敗します。その上で

、これを試してみる:

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

私はこれを自分で試していないが、私は、これはあなたが:)

+0

とき、私を探しているドロイドかもしれない疑い私はprocessDataを使用しないでください、私は不正な呼び出しを取得します。しかし、processData:falseを指定すると、レールに内部サーバエラーが発生します。 – DGM

関連する問題