Vous n'êtes pas identifié(e).
- Discussions : Actives | Sans réponse
Annonce
Pensez d'abord à lire la FAQ, vous y trouverez probablement une solution à votre problème.
Pages : 1
#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
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
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
Re : Bug lors de la selection des fichiers
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
Pages : 1