Загрузка большого файла (> 3 МБ) из ajax-загрузки Valum в Rails завершается неудачно без вызова контроллера - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь загрузить фотографии с valums 'на сервер ruby ​​apache & nginx + passenger, rails 3 ruby ​​1.9 (1.8 на dev) Обычно файл размером более 3 МБ завершается ошибкой со следующей трассировкой:

#

Запущено POST "/settings/uploadpict?qqfile=venise.JPG&user_id=680251975" для 82.245.125.231 в пятницу, 5 апреля 23:30:30 +0200 2011

TypeError (ожидаемый хэш (получил String) для параметра `'):

Предоставлено /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb в пределах rescues/ layout (17.2ms)

#

Я убедился, что это не 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 голосов
/ 07 апреля 2011

нашел это здесь http://developer.appcelerator.com/question/116980/iphone--rails--xhr--undefined-method-tosym-for-nilnilclass

Я нашел «проблему», она в исходном коде Rails

Ошибка в rails / actionpack-3.0.3 / instrumentation.rb line (22)

Я не знаю, действительно ли это проблема. Это происходит потому, что Titanium.Network.createHTTPClient () не отправляет Content-Type по умолчанию В моем примере я не использовал Content-Type, это вызывает ошибку на рельсах Я добавил Content-Type в коде // ... xhr.open ('GET', url, false); xhr.setRequestHeader ('Content-Type', 'application / json'); xhr.send ();
/// Теперь работает Я думаю, что text / plain может быть Content-Type по умолчанию для Titanium XHR, а не пустым, как сейчас. Я также создал тикет на Rails Issue Tracker https://rails.lighthouseapp.com/projects/8994/tickets/6546-error-sending-empty-content-type-instrumentationrb22

0 голосов
/ 07 апреля 2011

После исследования я нашел обходной путь => ДЕСАКТИВНЫЙ XHR !!!

в загрузчике файлов valums .js:

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

и после этого он работает безупречно, используя устаревший iframe ... нет больше приятного прогресса, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...