From c7bb0ee7e0239578cfb79cc5f855e8c376da3f4c Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Thu, 24 Jan 2019 17:19:03 +0100 Subject: [PATCH] =?UTF-8?q?Retry=20sur=20la=20r=C3=A9cup=C3=A9ration=20du?= =?UTF-8?q?=20nom=20du=20fichier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/file_picker/file_picker.js | 134 ++++++++++++------ 1 file changed, 91 insertions(+), 43 deletions(-) diff --git a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js index 01b5306e..5e493a47 100644 --- a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js +++ b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js @@ -147,66 +147,114 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie for (var i = 0; i < aAvaliableFiles.length; i++) { - ajaxRequest({ - 'method': 'GET', - 'url': aAvaliableFiles[i], - 'headers': { - 'Accept': 'application/x-vm-json' - }, - 'scope': scope, - 'ajaxLoader': true, - 'responseType': 'blob', - 'success': function(response) { - - iCounter++; - if (goog.isDefAndNotNull(response['data'])) { - var oBlob = response['data']; - - if (goog.isDefAndNotNull(response['headers'])) { - if (goog.isString(response['headers']['content-disposition'])) { - - var sName; - var aContentDisp = response['headers']['content-disposition'].split(';'); - for (var i = 0; i < aContentDisp.length; i++) { - if(aContentDisp[i].indexOf('filename=') !== -1){ - sName = aContentDisp[i].split('"')[1]; - } - } - - if (sName) { - oBlob['name'] = sName; - // oBlob['lastModified'] = new Date().getTime(); - // oBlob['lastModifiedDate'] = new Date(); - // oBlob['webkitRelativePath'] = ''; + scope['downloadFileBlob'](aAvaliableFiles[i], 3).then( + function success(oBlob){ - // var oFile = new File([oBlob], sName, { - // 'type': scope['field']['type'] === 'image_wsdata' ? 'image' : '' - // }); + scope['aFiles'].push(oBlob); - // scope['aFiles'].push(oFile); - } - } - } - scope['aFiles'].push(oBlob); - } + iCounter++; if (iCounter === aAvaliableFiles.length) { deferred.resolve(); } + }, - 'error': function(response) { + function error(){ iCounter++; if (iCounter === aAvaliableFiles.length) { deferred.resolve(); } + }); + } + } + + return deferred.promise; + } + + /** + * Télécharge le blob d'un fichier depuis son URL + * + * @param {string} sFileUrl URL du fichier + * @param {number|undefined} iRetry Nombre de fois à retenter en cas de problème + * @return {promise} fonction prenant le blob en paramètre + */ + scope['downloadFileBlob'] = function(sFileUrl, iRetry) { + $log.log("formReader.FilePickerDirective.downloadFileBlob " + iRetry); + + var deferred = $q.defer(); + + ajaxRequest({ + 'method': 'GET', + 'url': sFileUrl, + 'headers': { + 'Accept': 'application/x-vm-json' + }, + 'ajaxLoader': true, + 'responseType': 'blob', + 'success': function(response) { + if (goog.isDefAndNotNull(response['data'])) { + + var oBlob = response['data']; + + // Trouve le nom du fichier + var sFileName = scope['findFileNameInHeaders'](response['headers']); + + if (goog.isDefAndNotNull(sFileName)) { + oBlob['name'] = sFileName; + deferred.resolve(oBlob); + } else { + console.error('cannot get name from headers : ', response['headers']); + + // Retry + if (goog.isDefAndNotNull(iRetry)) { + if (iRetry > 0) { + iRetry--; + scope['downloadFileBlob'](sFileUrl, iRetry).then( + function success(oBlob){ + deferred.resolve(oBlob); + }, + function error(){ + deferred.reject(); + } + ); + } + } } - }); + } else { + deferred.reject(); + } + }, + 'error': function(response) { + deferred.reject(); } - } + }); return deferred.promise; } + /** + * Récupère le nom du fichier depuis les headers + * + * @param {object} oHeaders Headers + * @return {string} Nom du fichier + */ + scope['findFileNameInHeaders'] = function(oHeaders) { + var sName; + + if (goog.isDefAndNotNull(oHeaders)) { + if (goog.isString(oHeaders['content-disposition'])) { + var aContentDisp = oHeaders['content-disposition'].split(';'); + for (var i = 0; i < aContentDisp.length; i++) { + if(aContentDisp[i].indexOf('filename=') !== -1){ + sName = aContentDisp[i].split('"')[1]; + } + } + } + } + + return sName; + } + /** * Download the given file * @param {object} oFile -- GitLab