2012-09-14 121 views
7

我使用此腳本在Rails 3.2.8應用程序中使用HTML5 FormData上傳文件(逐個)。使用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添加內容類型標題,這會導致邊界字符串丟失。從上面的鏈接問題:

這是你必須的contentType選項設置爲false,迫使jQuery的不添加Content-Type頭的你,否則,邊界線將它丟失。此外,您必須將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,我在rails中出現內部服務器錯誤。 – DGM