From 8828594698b166049c90ee6c9a1b910bea63fceb Mon Sep 17 00:00:00 2001 From: Daniel Munn Date: Thu, 7 Jun 2012 14:33:41 +0100 Subject: [PATCH] Fix upload to deal with failed uploads more gracefully. --- app/views/dmsf/_multi_upload.html.erb | 49 ++++++++++++++++----------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/app/views/dmsf/_multi_upload.html.erb b/app/views/dmsf/_multi_upload.html.erb index d0ae8d54..6aeb55e3 100644 --- a/app/views/dmsf/_multi_upload.html.erb +++ b/app/views/dmsf/_multi_upload.html.erb @@ -100,31 +100,40 @@ var responseObject = jQuery.parseJSON(response.response); if (responseObject == null) { //Bug: on Firefox folders entries act unexpectedly. file.status = plupload.FAILED; - return; - } - - if (responseObject.error == null) { - var disk_filename_input = jQuery("").attr("type","hidden") - .attr("name","uploaded[" + dmsfFileFieldCount + "][disk_filename]") - .val(responseObject.disk_filename); - uploader.append(disk_filename_input); - var content_type_input = jQuery("").attr("type","hidden") - .attr("name","uploaded[" + dmsfFileFieldCount + "][content_type]") - .val(responseObject.content_type); - uploader.append(content_type_input); - var original_filename_input = jQuery("").attr("type","hidden") - .attr("name","uploaded[" + dmsfFileFieldCount + "][original_filename]") - .val(responseObject.original_filename); - uploader.append(original_filename_input); + pluploader.trigger('UploadProgress', file); + pluploader.trigger('QueueChanged'); } else { - file.status = plupload.FAILED; - responseObject.error.file = file; - pluploader.trigger('Error', responseObject.error); + if (responseObject.error == null) { + var disk_filename_input = jQuery("").attr("type","hidden") + .attr("name","uploaded[" + dmsfFileFieldCount + "][disk_filename]") + .val(responseObject.disk_filename); + uploader.append(disk_filename_input); + var content_type_input = jQuery("").attr("type","hidden") + .attr("name","uploaded[" + dmsfFileFieldCount + "][content_type]") + .val(responseObject.content_type); + uploader.append(content_type_input); + var original_filename_input = jQuery("").attr("type","hidden") + .attr("name","uploaded[" + dmsfFileFieldCount + "][original_filename]") + .val(responseObject.original_filename); + uploader.append(original_filename_input); + } else { + file.status = plupload.FAILED; +// responseObject.error.file = file; +// pluploader.trigger('Error', responseObject.error); + pluploader.trigger('UploadProgress', file); + pluploader.trigger('QueueChanged'); + /* + To-do: Though this is the documented method of reporting an error, on chrome this seems + to result in a bug, where the file afterwards seems to be out of sync and fired at the same + time as another, however this will only process one return from this. If I notify of a file fault, but don't + trigger a message, all seems to work as indtended. + */ + } } - if(pluploader.total.uploaded == pluploader.files.length) jQuery('#uploadform').submit(); else if(pluploader.total.uploaded + pluploader.total.failed == pluploader.files.length) setTimeout(function() {jQuery('#uploadform').submit();}, 2000) else dmsfFileFieldCount++; + return true; }); }