Загрузка файла HTML5 FormData с помощью RubyOnRails

Я использую этот script для загрузки файла (один за другим) с помощью HTML5 FormData в приложении Rails 3.2.8.

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

Вы видели эту проблему? Отправка multipart/formdata с помощью 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
});

Я не пробовал это сам, но я подозреваю, что это могут быть дроиды, которые вы ищете:)