Загрузка файла HTML5 FormData с помощью RubyOnRails
Я использую этот скрипт для загрузки файла (один за другим) с помощью HTML5 FormData в приложении Rails 3.2.8.
$('.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
});
Я не пробовал это сам, но я подозреваю, что это могут быть те дроиды, что вы ищете :)