iGalerie

Vous n'êtes pas identifié(e).

Annonce

Un message d'erreur qui s'affiche ? Un mot de passe oublié ? L'ajout de fichier qui ne marche pas ?
Pensez d'abord à lire la FAQ, vous y trouverez probablement une solution à votre problème.

#1 28-06-2024 12:04:15

dams75
Membre
Inscription : 28-06-2024
Messages : 6

Bug lors de la selection des fichiers

Hello,
Nous avons un soucis lors de la sélection d'images pour upload, en effet, cela retourne
Type de fichier non valide.

Evidemment le fichier a été vérifié et n'a aucun soucis.
Si je le dépose une 2eme fois, cette fois ca passe, voici la capture
Capture-d-e-cran-2024-06-28-a-11-56-26.png

En allant dans le code source /js/upload.js
l'erreur se déclenche à cette fonction checkFile(files, i)
et c'est plus précisement ceci:
var e = setTimeout(function() { img = null; addToList(files, i, 'filetype'); }, 1000);

le readfile n'a pas fini que le timeout se déclenche, je suggere d'utiliser une promesse pour gerer readfile

Bon courage

Hors ligne

#2 28-06-2024 12:10:55

dams75
Membre
Inscription : 28-06-2024
Messages : 6

Re : Bug lors de la selection des fichiers

Voici une proposition de fix

// Dimensions de l'image.
		if (file.type.match(/^image/))
		{

			function readFile(file) {
				return new Promise((resolve, reject) => {
					var f = new FileReader();
					f.onload = function() {
						resolve(f.result);
					};
					f.onerror = function() {
						reject(f.error);
					};
					f.readAsDataURL(file);
				});
			}

			var img = new Image();
			readFile(file).then(result => {
				if (img !== null) {
					img.onload = function() {
						addToList(files, i, (img.width > This.options.maxWidth || img.height > This.options.maxHeight) ? 'imagesize' : false);
					};
					img.src = result;
				}
			}).catch(error => {
				console.error('File reading error', error);
				addToList(files, i, 'filetype');
			});

		}
		else
		{
			addToList(files, i, false);
		}

Hors ligne

#3 28-06-2024 20:25:22

David
Développeur d'iGalerie
Inscription : 12-05-2006
Messages : 4 382
Site Web

Re : Bug lors de la selection des fichiers

Salut,

Merci pour la suggestion, mais ce code ne résout pas le problème qui m'a poussé à utiliser un setTimeout(). Le problème, c'est que si une image est corrompue ou non valide, alors cela bloque le script et on a aucun message indiquant que l'image n'est pas valide. Il suffit de faire le test avec un fichier qui n'est pas une image en changeant son extension en .jpg par exemple.

L'utilisation de setTimeout() n'est pas idéale, c'est certain, mais c'est la seule que j'ai trouvée qui fonctionne. En tout cas chez moi je n'ai aucun soucis avec n'importe quel navigateur, même avec des images de plus de 10000 pixels de coté. J'ai mis une durée de 1000 ms, mais peut-être qu'en passant cette valeur à 2000 cela permettrait de résoudre le problème ?

Hors ligne

#4 28-06-2024 22:32:41

dams75
Membre
Inscription : 28-06-2024
Messages : 6

Re : Bug lors de la selection des fichiers

Merci David pour ta réponse,

je comprends l'idée du Timeout, mais j'ai peur que ce soit trop aléatoire, si l'ordi lag un peu et n'a pas fini le traitement, ca retourne faux (sans doute c'est ce qui ce passe pour moi)

pourquoi pas utiliser l'event onerror de l'objet Image ?

img.onerror = function() {
                console.log('onerror, Invalid image');
addToList(files, i, 'filetype');
            };

ce qui donnerait

// Dimensions de l'image.
		if (file.type.match(/^image/))
		{

			function readFile(file) {
				return new Promise((resolve, reject) => {
					var f = new FileReader();
					f.onload = function() {
						resolve(f.result);
					};
					f.onerror = function() {
						reject(f.error);
					};
					f.readAsDataURL(file);
				});
			}

			var img = new Image();
			readFile(file).then(result => {
				if (img !== null) {
					img.onload = function() {
						addToList(files, i, (img.width > This.options.maxWidth || img.height > This.options.maxHeight) ? 'imagesize' : false);
					};
                                        img.onerror = function() {
                                           console.log('onerror, Invalid image');
                                           addToList(files, i, 'filetype');
                                        };
					img.src = result;
				}
			}).catch(error => {
				console.error('File reading error', error);
				addToList(files, i, 'filetype');
			});

		}
		else
		{
			addToList(files, i, false);
		}

Je ne sais pas si cette solution est viable, je testerais demain

Hors ligne

#5 28-06-2024 22:35:12

dams75
Membre
Inscription : 28-06-2024
Messages : 6

Re : Bug lors de la selection des fichiers

sinon il y a la gestion d'exception avec try ... catch, c'est une autre piste

Hors ligne

#6 29-06-2024 10:08:57

David
Développeur d'iGalerie
Inscription : 12-05-2006
Messages : 4 382
Site Web

Re : Bug lors de la selection des fichiers

dams75 a écrit :

pourquoi pas utiliser l'event onerror de l'objet Image ?

img.onerror = function() {
                console.log('onerror, Invalid image');
addToList(files, i, 'filetype');
            };

Tout simplement ! Effectivement ça marche bien avec cette solution. Je ne sais pas comment j'ai fait pour passer à coté... En fait je m'étais focalisé uniquement sur l'événement onerror de FileReader, sans succès.

En tout cas, merci pour la solution que j'intégrerai dans la prochaine version d'iGalerie.

Hors ligne

#7 01-07-2024 14:23:39

dams75
Membre
Inscription : 28-06-2024
Messages : 6

Re : Bug lors de la selection des fichiers

Top, merci David

Pour savoir, tu vas prendre en compte également la version avec promesse ?

Hors ligne

#8 02-07-2024 09:51:03

David
Développeur d'iGalerie
Inscription : 12-05-2006
Messages : 4 382
Site Web

Re : Bug lors de la selection des fichiers

Je ne pense pas vu que ça marche très bien sans, et que je n'ai constaté aucune différence en utilisant une promesse.

Hors ligne

Pied de page des forums

Propulsé par FluxBB