从Valum的ajax上传到Rails的大文件(> 3mb)上传失败,没有调用控制器

时间:2011-04-06 07:43:29

标签: ruby-on-rails file-upload

我正在尝试使用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); }
});
}

2 个答案:

答案 0 :(得分:0)

经过调查,我发现了一种解决方法=&gt; DESHTIVATE XHR !!!

在valums的fileuploader .js中:

qq.UploadHandlerXhr.isSupported = function(){
return false;    
};

之后,它使用传统的iframe完美无缺地工作......虽然没有更好的进度条......

答案 1 :(得分:0)

http://developer.appcelerator.com/question/116980/iphone--rails--xhr--undefined-method-tosym-for-nilnilclass

找到了这个

我发现了“问题”,它出现在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

上创建了一张票