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

Я использую этот скрипт для загрузки файла (один за другим) с помощью 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, добавляя заголовки типа контента, что приводит к отсутствию граничной строки. Из вышеупомянутого связанного вопроса:

крайне важно, чтобы вы установили до false, заставляя jQuery не добавлять заголовок типа контента для вас, иначе в нем будет отсутствовать строка границы. Кроме того, вы должны оставить processData флаг установлен в false, в противном случае jQuery попытается преобразовать ваши FormData в строку, которая потерпит неудачу.

основываясь на этом, попробуйте:

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

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