IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Plupload gestion des noms de fichiers


Sujet :

JavaScript

  1. #1
    Membre averti
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeuse Web

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Par défaut Plupload gestion des noms de fichiers
    Bonjour à tous,

    Je suis confrontée à un problème avec le plugin Plupload et malgré l'aide de mes collègues, on ne trouve pas d'explication et donc pas de solution. Et google semble ne pas en avoir entendu parler non plus.

    Plupload est un plugin d'upload d'images et fichier. Il fonctionne très bien. Sauf que pour une raison étrange, sur quelques utilisateurs (une dizaine sur une masse importante), lorsqu'il fait son travail, il renomme des fichiers de façon bizarre.
    Pour donner un exemple.
    Je veux uploader "mon_image.png", le plugin va rechercher si d'autres fichiers portent ce nom dans son dossier de destination. Si c'est le cas, il va renommé le fichier "mon_image (1).png".
    Une fois le fichier dans mon dossier, il procède à l'enregistrement en base et il va respecter le nom de l'image selon la situation qu'il a rencontré.
    Hors, dans notre cas, pour une raison indéterminée, il renomme systématiquement le fichier en "mon_image--1.png" et s'il existe la fois suivante "mon_image--2.png". Sauf qu'il enregistre en base "mon_image.png", comme si il n'y avait jamais eu de souci.

    Autre hic, je n'arrive absolument pas à reproduire ce bug. Les utilisateurs sont sur la dernière version de IE, mais là aussi, de mon côté, tout se passe bien et sur les pc de mes collègues, tout va bien aussi. J'ai constaté que ce problème avait déjà eu lieu fin 2016 (je n'étais pas dans la boîte) mais selon le client, il semble que cela n'avait pas été repéré. Donc aucune idée de ce qui a pu résoudre le problème entre fin 2016 et maintenant.

    Je vous donne le code du plupload (ci-dessous). On a légèrement retouché le plugin pour nos besoins.

    Quelqu'un aurait-il déjà croisé ce souci?

    Merci pour votre attention.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    function addUpload(form_,type_,container_,button_,multiple_,ext_,params) {
    		var extended_parameters = new Array();
    		type_ = 'file_name_'+type_+'[]';
    		return addUploadApply(form_,type_,container_,button_,multiple_,ext_,params, extended_parameters);
    	}
     
    //La principale différence entre addUpload et addUploadV2 est que pour la seconde, le name fourni pour le champ (variable type_ = input_name) n'est pas réécrit par la fonction, il est utilisé tel quel ce qui est bien plus pratique pour le dévelopepment
    	function addUploadV2(form_id, input_name, container_id, upload_button_id, multiple_, ext_, http_get_params, extended_parameters) {
    		return addUploadApply(form_id, input_name, container_id, upload_button_id, multiple_, ext_, http_get_params, extended_parameters);
    	}
     
    	//Cette fonction a été redéfinie dans le cadre de MultiALL
    	//On y ajoute un tableau de parameters afin de gérer d'éventuels paramètres supplémentaires, ce qui est compliqué à faire à l'heure actuelle
    	//Ca nous servira plus tard
    	function addUploadApply(form_,type_,container_,button_,multiple_,ext_,params, extended_parameters){ nb_upload_fields++;
     
    	 	var nb_fichiers = 0;
    		var total_files_size = 0;
     
    		var file_upload = '/backoffice/upload.php?'+params;
     
    		var uploader = new plupload.Uploader({
    			multi_selection: false,
    			form : form_,
    			runtimes : 'gears,html5,flash,silverlight,browserplus,html4',
    			browse_button : button_,
    			container : container_,
    			//max_file_size : '2mb',
    			max_queue_size : '62914560', // 60 Mo
    			url : file_upload,
    			flash_swf_url : '/plupload/plupload.flash.swf',
    			silverlight_xap_url : '/plupload/plupload.silverlight.xap',
    			filters : [
    				{title : "Files", extensions : ext_}
    			]
    		});
     
    		uploader.init();
     
     
    		uploader.bind('FilesAdded', function(up, files) {
     
    			/*$('#next_btn').hide();*/
    			if(!multiple_ && nb_fichiers > 0){
    				$('#'+container_+' .inputlist, #'+container_+' .filelist').html("");
    				nb_fichiers = 0;
    			}
     
    			$.each(files, function(i, file) {
    				total_files_size += file.size;
    			});
     
    			if(total_files_size < uploader.settings.max_queue_size){
     
    				$.each(files, function(i, file) {
     
    					nb_fichiers++;
    					c_ = '<div class="col-md-4" id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>';
     
    					if(multiple_){ $('#'+container_+' .filelist').append(c_); }
    					else{ $('#'+container_+' .filelist').html(c_); }
     
    				});
     
    				nb_upload_uploading++;
    				up.refresh(); // Reposition Flash/Silverlight
    				uploader.start();
     
    			}else{
    				$.each(files, function(i, file) {
    					total_files_size -= file.size;
    					up.removeFile(file);
    				});
    				if(!$('#'+container_+' .filelist div').length) $('#'+container_+' .filelist').append('<div></div>');
    				$('#'+container_+' .filelist div').prepend('<b>ERROR</b> ').css('color', '#ff0000');
    				alert('Error : 11 The selected file is too big.');
    				//$('#plupload_error').modal();
    			}
     
    		});
     
    		uploader.bind('UploadProgress', function(up, file) {
    			$('#'+uploader.settings.form+' #' + file.id + " b").html(file.percent + "%");
    		});
     
    		uploader.bind('Error', function(up, err) {
     
    				$('#'+container_+' .filelist div').prepend('<b>ERROR</b> ').css('color', '#ff0000');
    				alert('Error : '+obj.error.code+' '+obj.error.message);
     
    			/*$('#'+uploader.settings.form+' #filelist').append("<div>Error: " + err.code +
    				", Message: " + err.message +
    				(err.file ? ", File: " + err.file.name : "") +
    				"</div>"
    			);*/
     
    			up.refresh(); // Reposition Flash/Silverlight
    		});
     
    		uploader.bind('FileUploaded', function(up, file, info) {
    			$('#'+container_+' .inputlist ' + file.id + " b").html("100%");
    			var obj = JSON.parse(info.response);
     
    			// Détection d'une erreur dans le PHP
    			if (obj.error !== undef) {
    				$('#'+container_+' .filelist div').prepend('<b>ERROR</b> ').css('color', '#ff0000');
    				alert('Error : '+obj.error.code+' '+obj.error.message);
    				return false;
    			}
     
    			var c_ = '<input type="hidden" name="'+type_+'" value="' + obj.result.cleanFileName + '" class="uploadedFile ' + file.id + '" />';
    	    	if(multiple_){ $('#'+container_+' .inputlist').append(c_); }
    	    	else{ 
              //$('#'+container_+' .inputlist').html("");
              if ($('#'+container_+' .inputlist .uploadedFile').length && $('#'+container_+' .inputlist .uploadedFile').attr('name') != '' ) $('#'+container_+' .inputlist .uploadedFile').val(obj.result.cleanFileName); 
              else $('#'+container_+' .inputlist').html(c_);
            }
            if ($('#'+container_+' .fileRemoveButton').length) $('#'+container_+' .fileRemoveButton').show(); 
    		});
     
    		uploader.bind('UploadComplete', function(up, file) {
    			nb_upload_completed++;
    			if(check_upload()){ $('#next_btn').show(); }
    		});
     
    	}

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Salut,

    Je ne connais pas plupload donc ma réponse sera sur le principe de fonctionnement. Sur le principe, l'enregistrement en bdd se fait si le fichier est correctement uploadé, et cela se réalise côté php. Donc je doute fortement que la partie javascript soit en cause ou nous soit d'une quelconque utilité pour te répondre. Ton bug vient certainement de ton code côté serveur, une mise à jour vers une version supérieure de php pourrait être à l'origine du problème.

    Si tu as des problèmes avec plupload et de son interaction côté serveur, alternativement tu peux utiliser ce module d'upload ajax. L'avantage est qu'il est fourni avec une quinzaine d'exemples entièrement fonctionnels côté Javascript et côté Php, suffit de dézipper le dossier proposé en téléchargement puis de le poser sur ton serveur, soit 3 minutes maximum pour faire les premiers tests.
    Le mode d'emploi et les commentaires sont en français et il y a ce qu'il faut comme exemples pour renommer des fichiers en cas de doublons sur le serveur en mode incrémentiel comme dans ton cas, ou en ajoutant un suffixe aléatoire au nom du fichier (ce qui est plus performant), mais aussi pour faire du recadrage ou des redimensions d'images, etc.

    Pour donner un exemple concret, tu pourrais utiliser le fichier "UploadAjaxABCI_Custom.php" qui est finalisé et customisé et renomme les fichiers en cas de doublon sur le serveur. Par défaut les fichiers sont renommés en ajoutant un suffixe aléatoire au nom du fichier. Si tu préfère le mode incrémentiel, suffit de te rendre dans le fichier php côté serveur - soit Php_Upload/UploadAjaxABCI_Php_Load_Custom.php - et à la ligne 86 tu remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $destination_fichier = $up->renameIdenticName($destination_fichier);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $destination_fichier = $up->renameIdenticName($destination_fichier,'incr');
    et c'est tout.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/07/2014, 08h11
  2. Regexpr sur les noms de fichiers, douleur, souffrance
    Par ManusDei dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/07/2012, 14h36
  3. Boucle sur les noms de fichier d'un répertoire
    Par bilou_12 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/04/2012, 11h12
  4. Les accents sur les noms des fichiers passent mal
    Par fab53 dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2008, 15h05
  5. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo