Ruby on rails 从Valum';上传一个大文件(>;3mb);在不调用Controller的情况下,将ajax上载到Rails失败

Ruby on rails 从Valum';上传一个大文件(>;3mb);在不调用Controller的情况下,将ajax上载到Rails失败,ruby-on-rails,file-upload,Ruby On Rails,File Upload,我正试图在ruby服务器apache&nginx+passenger、Rails3Ruby1.9(开发人员上的1.8)上上传带有valums的图片 通常,超过3Mb的文件将失败,并出现以下跟踪: # 于2011年4月5日星期二23:30:30+0200开始发布82.245.125.231的“/settings/uploadpict?qqfile=venise.JPG&user_id=680251975” TypeError(参数“%1”应为哈希(获取字符串): rescues/layout中呈现

我正试图在ruby服务器apache&nginx+passenger、Rails3Ruby1.9(开发人员上的1.8)上上传带有valums的图片 通常,超过3Mb的文件将失败,并出现以下跟踪:

# 于2011年4月5日星期二23:30:30+0200开始发布82.245.125.231的“/settings/uploadpict?qqfile=venise.JPG&user_id=680251975”

TypeError(参数“%1”应为哈希(获取字符串):

rescues/layout中呈现的/usr/lib/ruby/gems/1.8/gems/actionpack-3.0.5/lib/action\u dispatch/middleware/templates/rescues/diagnostics.erb(17.2ms)

# 我确保不是apache或nginx切断了流量(nginx做到了这一点,我提出了最大sie请求)

令人费解的是,我的控制器甚至没有被调用(它从一个logger.console开始,它不打印…),所以我有点无助于跟踪问题

有线索吗

查看代码(从未调用控制器…)

//Valum的Ajax文件上传//
函数设置\文件\上传(){
var uploader=new qq.FileUploader({
//传递dom节点(对于jQuery用户,例如$(选择器)[0]
元素:$(“#设置#上传#btn”)[0],
//服务器端上载脚本的路径
操作:'/settings/uploadpict',
//要发送的其他数据,名称-值对
参数:{
用户id:
},
//验证
//例如['jpg'、'jpeg'、'png'、'gif']或[]
允许的扩展:['jpg'、'jpeg'、'png'、'gif'、'gif'、'bmp'],
//每个文件的大小限制(以字节为单位)
//并非所有浏览器都支持此选项
//sizeLimit:0,//最大大小
//minSizeLimit:0,//最小大小
//设置为true以将服务器响应输出到控制台
调试:错误,
//事件
//您可以返回false以中止提交
onSubmit:函数(id、文件名){
//收拾残局。。。。
$(“.qq上传列表”).empty();
},
onProgress:function(id,fileName,loaded,total){},
onComplete:函数(id、文件名、responseJSON){
if(responseJSON[“success”]==“false”| | responseJSON[“success”]==未定义){
$(“.qq上传失败文本”).show();
}否则{
//跳舞
上传完成(responseJSON[“filename”]);
}
},
onCancel:函数(id,文件名){},
信息:{
//错误消息,请参阅qq.FileUploaderBasic以了解内容
},
showMessage:function(message){alert(message);}
});
}

经过调查,我发现了一个解决办法=>解除XHR的激活

在valums的fileuploader.js中:

qq.UploadHandlerXhr.isSupported = function(){
return false;    
};
之后,它使用legacy iframe完美地工作。。。不过没有更好的progressbar…

在这里找到了这个

我在Rails源代码中找到了“问题”

错误在rails/actionpack-3.0.3/instrumentation.rb行(22)中

我不知道这是否真的是个问题。之所以发生这种情况,是因为Titanium.Network.createHTTPClient()未将内容类型作为默认类型发送 在我的示例中,我没有使用内容类型,这会在rails上导致错误 我在代码中添加了内容类型 //... xhr.open('GET',url,false); setRequestHeader('Content-Type','application/json'); xhr.send()
/// 现在它起作用了
我认为text/plain可以作为Tianium XHR的默认内容类型,而不是像现在这样为空。我还创建了一个Rails问题跟踪器

,可能有助于查看视图代码和/或控制器添加到主控制器中-控制器没有用,它从未调用过!(这就是全部的痛苦..我可以处理代码中的一个bug,但我不能指出这个错误是从哪里抛出的…)
qq.UploadHandlerXhr.isSupported = function(){
return false;    
};