使用RubyOnRails上传HTML5 FormData文件

时间:2012-09-14 20:47:09

标签: ruby-on-rails ajax html5 file-upload form-data

我使用此脚本在Rails 3.2.8应用程序中使用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

如何解决此错误?

1 个答案:

答案 0 :(得分:17)

你见过这个问题吗? 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
});

我自己没试过,但我怀疑这可能是你正在寻找的机器人:)