使用RubyOnRails上传HTML5 FormData文件
我使用这个脚本在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('' + file.name + ' '); 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
看起来您可能会遇到添加内容类型标头的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 });
我自己没试过,但我怀疑这可能是你正在寻找的机器人:)
- rails link_to remote with params
- 使用rails中的simple_form和AJAX解析JSON错误
- 渲染部分视图时ajax中的动态内容
- 如何做一个Ajax GET请求从rails获取数据并将其传递给javascript(谷歌地图)?
- Javascript不是在脚本中呈现而是作为html呈现
- 如何在AJAX中优雅地处理设计401的状态?
- Rails:在textfield中执行onchange远程函数时如何从另一个字段获取值
- 在Rails 3中执行任务时显示加载屏幕
- “警告:无法validationCSRF令牌真实性”错误 – 使用Devise的CORS和:token_authenticatable