我正在尝试使用valum上传pics对抗ruby服务器apache& nginx +乘客,rails 3 ruby 1.9(开发时1.8) 通常,超过3Mb的文件将失败,并带有以下跟踪:
于02年4月25日星期二23:30:30 + 0200开始发布“/settings/uploadpict?qqfile=venise.JPG&user_id=680251975”82.245.125.231
TypeError(param`'的预期Hash(得到字符串):
在救援/布局(17.2ms)内呈现/usr/lib/ruby/gems/1.8/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb
我确定它不是apache或nginx削减流量(nginx做了那个,我提出了最大的请求)
令人费解的是我的控制器甚至没有被调用(它以一个不打印的logger.console开始......)所以我对跟踪问题有点无奈......
有任何线索吗?
查看代码(永远不会调用控制器......)
//Valum's Ajax File Upload //
function setup_file_upload(){
var uploader = new qq.FileUploader({
// pass the dom node (ex. $(selector)[0] for jQuery users)
element: $("#settings_upload_btn")[0],
// path to server-side upload script
action: '/settings/uploadpict',
// additional data to send, name-value pairs
params: {
user_id: <%=@user.fb_id%>
},
// validation
// ex. ['jpg', 'jpeg', 'png', 'gif'] or []
allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'gif', 'bmp'],
// each file size limit in bytes
// this option isn't supported in all browsers
//sizeLimit: 0, // max size
//minSizeLimit: 0, // min size
// set to true to output server response to console
debug: false,
// events
// you can return false to abort submit
onSubmit: function(id, fileName){
//clean-up the mess....
$(".qq-upload-list").empty();
},
onProgress: function(id, fileName, loaded, total){},
onComplete: function(id, fileName, responseJSON){
if (responseJSON["success"] == "false" || responseJSON["success"] == undefined) {
$(".qq-upload-failed-text").show();
}else{
//do the dance
uploadDone(responseJSON["filename"]);
}
},
onCancel: function(id, fileName){},
messages: {
// error messages, see qq.FileUploaderBasic for content
},
showMessage: function(message){ alert(message); }
});
}
答案 0 :(得分:0)
经过调查,我发现了一种解决方法=&gt; DESHTIVATE XHR !!!
在valums的fileuploader .js中:
qq.UploadHandlerXhr.isSupported = function(){
return false;
};
之后,它使用传统的iframe完美无缺地工作......虽然没有更好的进度条......
答案 1 :(得分:0)
我发现了“问题”,它出现在Rails源代码
中错误发生在rails / actionpack-3.0.3 / instrumentation.rb第(22)行
中我不知道这是不是真的有问题。这是因为Titanium.Network.createHTTPClient()不会将Content-Type作为默认值发送
在我的例子中,我没有使用Content-Type,它导致了rails的错误
我在代码中添加了Content-Type
// ...
xhr.open('GET',url,false);
xhr.setRequestHeader('Content-Type','application / json');
xhr.send();
///
现在它有效
我认为text / plain可以是Titanium XHR的默认Content-Type,而不像现在这样是空的。我还在Rails Issue Tracker https://rails.lighthouseapp.com/projects/8994/tickets/6546-error-sending-empty-content-type-instrumentationrb22