我使用此脚本在 Rails 3.2.8 应用程序中使用 HTML5 FormData 上传文件(逐一)。
http://jsfiddle.net/RamPr/ 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
我该如何解决这个错误?
你见过这个问题吗?使用 jQuery.ajax 发送 multipart/formdata https://stackoverflow.com/questions/5392344/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
});
我自己没有尝试过,但我怀疑这可能就是您正在寻找的机器人:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)