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

Téléchargez Discussion :

Upload de gros fichiers par fragments (chunk)


Sujet :

Téléchargez

  1. #1
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut Upload de gros fichiers par fragments (chunk)
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Upload de gros fichiers par fragments (chunk), reprise d'upload, affichage des informations en temps réel et styles événementiels.

    Upload les fichiers par fragments compilés dans un fichier temporaire quand ils dépassent une valeur paramétrable. L'upload terminé, le fichier temporaire est renommé avec son nom initial (éventuellement corrigé) et déplacé vers son emplacement définitif.

    - Permet de surpasser les limitations serveur "upload_max_filesize" et "post_max_size".

    - Permet la reprise d'un téléchargement interrompu après une panne internet ou serveur, en utilisant la partie sauvegardée.

    - Supporte l'upload multiple et surpasse la configuration serveur "max_file_uploads" avec un système de file d'attente (queuing).

    - Retour d'informations en temps réel, personnalisable et très souple.

    a/ Huit informations*sont disponibles durant l'upload : nom, taille, progression graphique, progression textuelle, sauvegarde partielle effectuée, temps passé, temps restant estimé, status (en cours, ok, partiel, erreur).

    b/ Dispose de style événementiels qui s'appliquent en fonction des événements suivant*: formulaire envoyé, fichiers soumis, fichier en cours d'upload, sauvegarde partielle disponible, upload terminé, upload terminé ok, upload terminé partiel, upload terminé erreur.

    Dossier de test prêt à l'emploi. Le fichier d'exemple se nomme "UploadAjaxABCI.php". Ouvrez-le (sans modifier l'organisation du dossier) et ça devrait fonctionner !

    N'oubliez pas de consulter le mode d'emploi avant de poser des questions...

    ATTENTION*! Pour faire des tests sur un serveur local il est conseillé d'utiliser le paramètre ".config.ajax_delai" avec une valeur assez importante pour espacer l'envoi des requêtes (ce qui est déjà fait dans le fichier d'exemple). Je ne pourrai pas être tenu pour responsable si une sollicitation importante du système donne le coup de grâce d'un disque dur en cours d'agonie.


    L'encre est à peine sèche, je vous propose cette classe juste avant de prendre des vacances... j'espère que vous ne trouverez pas trop d'erreurs

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    La classe javascript est maintenant proposée en version 1.5.

    1/ Ajout des commandes :
    - arrêter
    - arrêter tout
    Ces commandes sont optimisées afin de pouvoir effectuer (éventuellement) une reprise d'upload ultérieure dans les meilleures conditions possibles.

    2/ Les styles événementiels suivants ont été ajoutés :
    - arrêter
    - sauvegarde existante pour au moins un fichier en fin de traitement
    - fin de traitement du formulaire

    3/ La classe récupère et envoie maintenant tous les champs du formulaire (uniquement les input de type file auparavant). Une option de configuration est disponible pour interdire l'envoi du formulaire en absence de fichiers.

    4/ Le script php a été légèrement modifié.

    Le fichier d'exemples est plus complet (reprend les commandes ci-dessus) et mieux documenté.
    Le mode d'emploi a été mis à jour

    Lien de téléchargement ici

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    La classe javascript est maintenant proposée en version 1.6

    - Ajout de l'information "pourcentage" (du téléchargement effectué).

    - Le style événementiel "fin de traitement du formulaire" peut être maintenant utilisé même si l'on souhaite ne pas envoyer le formulaire en absence de fichiers joints.

    - Correction d'un bug si l'on choisissait l'option d'afficher la boite de confirmation javascript pour la reprise d'un téléchargement.

    - Légère optimisation du code par ailleurs (et trois variables globales qui s'étaient insidieusement infiltrées ont été repérées et éliminées sans pitié).

    Tous les fichiers ont été mis à jour dont le mode d'emploi et le fichier d'exemples une nouvelle fois amélioré

    Téléchargement ici

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    Grosse mise à jour pour cette nouvelle version 1.7

    - Les fichiers sont désormais listés dès leur sélection avant d'être téléchargés.

    - Les noms des input de type file sont maintenant passés côté serveur ce qui permet des destinations différentes pour les fichiers dans le cas de formulaires contenant plusieurs champs de téléchargement.

    - Une classe php a été créée pour faciliter le téléchargement et le contrôle/renommage/destination/... des fichiers côté serveur.
    Des fonctions de bases sont disponibles comme la vérification des extensions, le renommage des fichiers en cas de doublon avec des fichiers du serveur ainsi que des fonctions pour renvoyer des messages vers les blocs d'informations du status des fichiers et vers le bloc d'information général du formulaire.

    Le script "UploadAjaxABCI_PhpLoad.php" est abondamment commenté pour donner des exemples.

    Tous les fichiers et le mode d'emploi ont été mis à jour


    Téléchargement ici

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Version 1.8

    - Correction d'un bug de la version 1.7 qui pouvait se produire dans certaines circonstances lors de l'arrêt volontaire du téléchargement d'un fichier (arrêtait le téléchargement du fichier mais aussi le script)

    - Modification du comportement de l'affichage du temps restant qui reprend désormais ses valeurs initiales en cas d'arrêt volontaire d'un téléchargement.

    Téléchargement ici

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Louvain-la-Neuve
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Louvain-la-Neuve

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Redimentionnement
    Bonjour,
    Tout d'abord barvo et merci pour ce magnifique travail! C'est vraiment bien pensé et fini...

    Je cherchait comment et où intégré ma fonction de redimensionnement... Car il me retourne une erreur...
    Fonction pour redimensionner:
    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
    	function Redimensionner($fichier, $new_width, $new_height){
     
      	$file_src = $fichier; 
    	$file_dest =$fichier;
    	//$new_width = 1000;
    	//$new_height = 1000;
    	$proportional=true;
     
    		$file_src_infos=pathinfo($file_src);
     
    		$attr=getimagesize($file_src);
    		$fw=$attr[0]/$new_width;
    		$fh=$attr[1]/$new_height;
     
    		$ext=strtolower($file_src_infos['extension']);
    		if(($ext=="jpg" or $ext=="png" or $ext=="JPG" or $ext=="PNG") and  ($attr[0]>$new_width or $attr[1]>$new_height))
    		{
     
    		if($proportional)
    			$f=$fw>$fh?$fw:$fh;
    		else
    			$f=$fw>$fh?$fh:$fw;
     
    		$w=$attr[0]/$f;
    		$h=$attr[1]/$f;
     
    		if($ext=="jpg") $ext="jpeg";
     
    		$func="imagecreatefrom".$ext; $src  = $func($file_src);
     
    		$x=0; $y=0;
    		if($proportional) $dest = imagecreatetruecolor($w,$h);
    		else {
    			$dest = imagecreatetruecolor($new_width,$new_height);
    			$x=($new_width-$w)/2; $y=($new_height-$h)/2; }
     
    		imagealphablending($dest,false);
     		imagesavealpha($dest,true);
    		imagecopyresampled($dest,$src,$x,$y,0,0,$w,$h,$attr[0],$attr[1]);
     
    		$func="image".$ext;
    		$func($dest, $file_dest);
    		imagedestroy($dest);
    		exit(json_encode(array('resultat' => 'Image redimentionnée.')));
    		}
     
    	}
    Lieu où je l'ai placée :
    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
    	if(!$UpAbci_blob_slice) // s'il est d'un seul morceau
    	{
    		if(@move_uploaded_file($_FILES['UpAbci_fragment']['tmp_name'], $destination_fichier))
    		{
    		Redimensionner($UpAbci_fichier_nom_final,'1000', '1000');
    		exit(json_encode(array('resultat' => 'upload_ok')));// ne pas modifier -> commande ajax
    				// Si OK on redimentionne 1000x1000 max.
    		}
    		else
    		exit(json_encode(array('erreur' => 'Erreur de transfert du fichier téléchargé.')));
    	}
    	else
    	{
    		 // On ouvre ou on crée le fichier
    		$fichier_cible = @fopen($temp_adresse, 'a+');
    		if($fichier_cible === false) exit(json_encode(array('erreur' => 'Erreur d\'ouverture du fichier temporaire.')));
    		
    		// On ouvre le contenu téléchargé
    		$upload_file = @fopen($_FILES['UpAbci_fragment']['tmp_name'], 'rb');
    		if($upload_file === false) exit(json_encode(array('erreur' => 'Erreur d\'ouverture du contenu téléchargé.')));
    		
    		// On lit son contenu dans une variable
    		$upload_size = $_FILES['UpAbci_fragment']['size'];
    		$upload_content = @fread($upload_file, $upload_size);
    		if($upload_content === false) exit(json_encode(array('erreur' => 'Erreur de lecture du contenu téléchargé.')));
    		fclose($upload_file);
    		
    		// On l'écrit dans le fichier temporaire
    		if(@fwrite($fichier_cible, $upload_content) === false) exit(json_encode(array('erreur' => 'Erreur d\'écriture du contenu téléchargé.')));
    		unset($upload_content);
    		
    		fclose($fichier_cible);
    		
    		$new_file_size = $cook_save_size + $upload_size;
    				
    		setcookie($cookie_name,rawurlencode($temp_adresse.'|'.$new_file_size),$time_cook_save,$path_cook_save);
    
    		if (!$UpAbci_fichier_fin) exit(json_encode(array('resultat' => 'continu')));// ne pas modifier -> commande ajax
    	}
    
    
    	if ($UpAbci_fichier_fin && $UpAbci_blob_slice) 
    	{
    		// vérification de l'intégrité du fichier
    		if ($verif_filesize_sup2Go_Ok || $UpAbci_fichier_size < 2147483648)
    		{
    			$size_upload = @filesize($temp_adresse);
    			
    			if($size_upload != $UpAbci_fichier_size)
    			{
    				setcookie($cookie_name,"",time()-3600,$path_cook_save);
    				exit(json_encode(array('erreur' => 'Erreurs possibles : la sauvegarde utilisée a été enregistrée lors d\'un instant critique, ou vous avez téléchargé simultanément deux fichiers identiques.')));
    			}
    		}
    		
    		if(@rename($temp_adresse,$destination_fichier)) 
    		{
    			setcookie($cookie_name,"",time()-3600,$path_cook_save);
    		// Si OK on redimensionne 1000x1000 max.
    		Redimensionner($UpAbci_fichier_nom_final,1000, 1000);
    			exit(json_encode(array('resultat' => 'upload_ok')));// ne pas modifier -> commande ajax
    		
    
    		}
    Un tout grand merci
    JPaul

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Attention dans ta fonction "Redimensionner" tu utilises exit(json_encode(array('resultat' => 'Image redimentionnée.'))); or l'index 'resultat' est réservé comme commande ajax. Si tu veux ajouter des informations dans la ligne de résultat du fichier inspires-toi de la fonction "addStatusOkAjax" (de la classe php) qui fait un merge de la réponse serveur utile à la requête ajax et de ton information personnalisée qui s'ajoutera au status ok du fichier.


    Quelques remarques :

    - Si c'est pour faire du redimensionnement d'images côté serveur j'ai fais cette autre classe d'upload et redimensionnement. Elle est simple à utiliser et toutes les fonctions de redimensionnement sont déjà faites avec de très nombreuses options. Elle n'autorise pas le dépassement de la configuration serveur "upload_max_filesize" mais c'est un moindre mal dans le sens où la plupart du temps cette valeur (64 Mo chez ovh mutualisé par exemple) est largement suffisante pour uploader des images sans avoir à les découper. Et en cas de dépassement quelconque la gestion des erreurs quasiment complète permet d'avertir clairement l'utilisateur du problème rencontré.
    C'est un peu pour cette raison que je n'ai pas encore proposé de module d'interaction entre les deux classes : quand il s'agit d'images et de redimensionnement côté serveur, la classe purement php suffit dans la plupart des cas et elle est prévue pour cela. La classe javascript de ce sujet quant à elle est surtout utile pour les plus gros fichiers mais bien entendu on peut en charger des plus petits...
    Une autre piste serait de faire le redimensionnement en javascript en utilisant les canvas html5 qui donnent une meilleure qualité que la bibliothèque GD de php. Mais le travail étant fait sur le navigateur du visiteur cela peut poser des problèmes de compatibilité surtout concernant la puissance de l'appareil utilisé.

    Enfin donc si c'est pour redimensionner des images en php regardes plutôt le lien vers cette classe dédiée

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Louvain-la-Neuve
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Louvain-la-Neuve

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Autre classe
    Re,
    J'avais déjà essayé ton autre classe consacrée à l'uplaod des images (très bien détaillée), mais j'aimais bien ta présentation de téléchargement des fichiers et j'essaye donc de combiner les 2.
    B à t
    JPAul

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Merci bien chef pour cette mise à jour.
    Agréable soirée à toi!!

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    Nouvelle version 1.9 en ligne

    A/ Améliorations

    1/ La classe serveur php a été mise à jour :

    - Permet de modifier plus facilement les fichiers téléchargés complets avant leur déplacement vers leur emplacement définitif. Des exemples sont donnés avec notamment une fonction de renommage de fichier et une fonction de redimensionnement d'images.

    - Meilleur gestion des erreurs en cas de fichiers temporaires non valides ou corrompus.


    2/ La classe ajax a été mise à jour :

    - Le status "téléchargement partiel" (qui indiquait une sauvegarde disponible) a été supprimé car il pouvait prêter à confusion en étant prioritaire sur le status "erreur serveur". C'était initialement prévu pour pouvoir afficher le maximum d'informations avec un minimum d'éléments html, mais après de multiples tests ce n'était pas pertinent dans tous les cas (suivant le type d'erreur). Comme par ailleurs une classe spécifique ainsi que des styles événementiels sont réservés à l'affichage de la sauvegarde disponible, autant afficher les deux informations séparément. L'affichage est maintenant cohérent dans tous les cas.


    3/ Exemples de formulaires de téléchargement

    - Les exemples du fichier de test "UploadAjaxABCI.php" ont été complétés et la présentation est plus élaborée.



    B/ Corrections

    1/ Classe ajax toutes versions
    Le temps restant n'était pas correctement renseigné en cas d'utilisation de la boite de confirmation javascript de reprise d'upload si l'on choisissait de réinitialiser le téléchargement en cliquant sur "annuler".

    2/ Classe ajax versions 1.7 et 1.8
    Les boutons de sélection de fichiers effacent maintenant les fichiers précédemment sélectionnés sur le comportement "onclick", (uniquement sur "onchange" auparavant) ce qui permet de refaire exactement la même sélection après un arrêt de tous les fichiers sans avoir besoin d'envoyer le formulaire ou de rafraichir la page. Fonctionnait néanmoins correctement sous Firefox, mais pas sous Chrome et IE. Ce disfonctionnement a pu être corrigé sous Chrome mais pas sous IE10 qui ne permet pas de modifier (même simplement de réinitialiser) les champs de type file. Je n'ai pas fait de correctif pour ce navigateur (et ceux qui ont le même problème) car ce cas de figure est somme toute très marginal et il reste toujours la possibilité de rafraîchir la page.

    3/ Classe php serveur versions 1.7 et 1.8 IMPORTANT
    La sauvegarde partielle de fichiers avec des noms incluant des caractères spéciaux sur l'ordinateur du visiteur n'était pas possible. Dans ce cas, seul le téléchargement de fichiers inférieurs à la taille d'un fragment (8Mo par défaut) était possible.

    4/ Mode d'emploi versions 1.7 et 1.8
    La deuxième note du chapitre "ordre d'application des styles" du mode d'emploi était erronée.




    Tous les fichiers et le mode d'emploi ont été mis à jour
    Lien de téléchargement

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Merci pour la mise à jour de ta classe.Je vais l'essayer et je te ferai le retour.Agréable journée à toi?
    Vraiment merci pour le travail que vous faites pour nous les novices.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Correction : concerne uniquement les éventuels champs supplémentaires de type "input" que vous pourriez ajouter dans le formulaire.

    Lors de la mise en ligne dans différents contextes je me suis aperçu que les champs input éventuellement rajoutés dans le formulaire - ne concerne pas les champs déjà présents nécessaires au téléchargement - n'étaient pas correctement encodés s'ils contenaient des caractères spéciaux.

    Explication : excès de zèle de ma part quand je passe ces champs dans le FormData en utilisant la méthode "encodeURIComponent". C'était oublier que je récupère préalablement ces champs avec la méthode "serialize" de jquery qui applique déjà cette fonction...
    => pour corriger cette erreur, dans le fichier "UploadAjaxABCI-DEV.js", faites une recherche sur {formData.append(tabv[0],encodeURIComponent(tabv[1]))} et remplacer par {formData.append(tabv[0],tabv[1])} (ligne 822).

    Je précise pour les débutants que pour avoir ensuite l'équivalent en fichier compressé (correspondant au fichier UploadAjaxABCI.js) il suffit d'utiliser un outil de ce genre, ou faire une recherche avec les termes "minify javascript online" dans un moteur de recherche.

    Je ferai prochainement une mise à jour de la fonction en ajoutant par la même occasion plus de fonctionnalités

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Louvain-la-Neuve
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Louvain-la-Neuve

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Redimentionnement
    J'ai réussi a intégrer le redimensionnement dans la partie où on a la possibilité d'envoyer vers msql. Ce qui fonctionne TB.
    Je n'ai pas encore trouvé comment changer le message. "Redimensionnement" mais ça fonctionne déjà TB.
    Encore bravo...
    Je vais pourvoir maintenant utiliser le v 1.9!
    Encore bravo pour ton travail! Tu n'arrêtes pas!
    JPAul

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par jpaulweb Voir le message
    Je vais pourvoir maintenant utiliser le v 1.9!
    Encore bravo pour ton travail! Tu n'arrêtes pas!
    Et bientôt la version 2.0 comprendra une option pour prévisualiser les fichiers (s'il s'agit de photos) avant le téléchargement

    En fait au départ je voulais faire cette classe pour le téléchargement de gros fichiers avec la possibilité de reprise d'upload. Et puis comme tu l'a dit plus haut, qui peut le plus peut le moins et on peut aussi utiliser cette classe dans tous les cas pour profiter du retour d'information en temps réel. Donc je continue le développement pour qu'elle soit généraliste et pouvoir l'utiliser "en remplacement" de ma première classe qui est uniquement en php (mais qui garde cependant son intérêt pour sa totale compatibilité avec les anciens navigateurs et son paramétrage beaucoup plus rapide qui peut convenir à de "grands débutants").
    Enfin bon je crois que j'arrive vers la fin du dev car après l'affichage des vignettes je vois ne vois plus trop de fonctionnalités à développer

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut Classe d'upload Ajax + php version 2.0
    Bonjour,

    La version 2.0 est en ligne ici !


    1/ Nouvelles fonctionnalités :

    -Affichage possible des vignettes de prévisualisation (si les fichiers sont des images) avant l'upload.
    Pour contenir cette information la classe css "UpAbci_apercu_img" a été créée, ainsi que 4 paramètres de configuration javascript :
    - .config.max_weight_apercu = ...; // en Mo. Poids maximal de chaque image pour prévisualisation. Si cette valeur est dépassée pour au moins une image dans un upload multiple, aucune vignette ne sera affichée afin de préserver une cohérence dans l'affichage des informations
    - .config.total_max_weight_apercu = ...; // en Mo. Poids total maximal de toutes les images (en téléchargement multiple) pour prévisualisation. Si dépassé aucune vignette ne sera affichée
    - .config.max_width_apercu = ...; // en pixels. Largeur maximale de l'aperçu
    - .config.max_height_apercu = ...; // en pixels. Hauteur maximale de l'aperçu

    - Gestion de l'affichage du temps restant
    Nouveau style événementiel "data-upabcicss-temps-restant-requis" qui sera appliqué si le temps restant estimé pour l'upload du fichier est supérieur à la valeur du nouveau paramètre de configuration javascript ".config.temps_restant_requis".
    L'idée est de pouvoir supprimer l'affichage du temps restant pour les petits fichiers tout en le rendant disponible pour les gros sans avoir besoin de modifier la configuration du script

    - Tâche cron de nettoyage
    Un nouveau fichier php nommé "nettoyage_temp.php" donne un exemple de script pour nettoyer le dossier temporaire. Ce script devrait être appelé régulièrement pour nettoyer les fichiers abandonnés dans le dossier temporaire.


    2/ Corrige le dernier petit bug mentionné dans ce message.



    Tous les fichiers dont le mode d'emploi et le fichier d'exemples ont été mis à jour

  16. #16
    Membre actif

    Inscrit en
    Octobre 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 168
    Points : 241
    Points
    241
    Par défaut
    Slt juste un mot pour ton travail ça à l'air pas mal.

    Bonne continuation.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Indépendant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 7
    Points
    7
    Par défaut Problème d'encodage
    Bonjour,
    J'apprécie beaucoup le code permettant de faire un upload de gros fichier. Bravo !
    J'ai toutefois un soucis avec l'encodage et la fonction "NettoieNomFichier". Pour cette dernière, on peut ne pas l'exécuter.
    J'ai un formulaire dans lequel je saisi un titre (avec des caractères accentués, des espaces ...) <input type="text" /> et un fichier à uploader (le nom du fichier peut aussi contenir des espaces et des caractères accentués).
    Dans UploadAjaxABCI_PhpLoad.php j'ai créé la mise à jour de ma bdd derrière un if($fichier_ok).
    Toutefois, je n'arrive pas à récupérer les noms originaux - titre et nom de fichier - avec leurs accents et espaces pour les mettre dans ma base de données car je dois les réutiliser tels quels plus tard.
    Les noms sont encodés, ainsi que le nom du fichier résultant de l'upload "Répétition" au lieu de "Répétition" par exemple.
    Comment puis-je retrouver et conserver ces caractères aussi bien dans les variables $_POST que dans le nom du fichier ?
    Merci par avance pour une réponse.
    Vincent

  18. #18
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par vilau Voir le message
    J'ai toutefois un soucis avec l'encodage et la fonction "NettoieNomFichier". Pour cette dernière, on peut ne pas l'exécuter.
    Oui effectivement côté php la classe fournie utilise la fonction "NettoieNomFichier" systématiquement. C'est pour avoir des noms de fichiers valides sur le serveur et tu risque d'avoir de gros problèmes avec des noms de fichiers exotiques.

    Mais tu n'es pas obligé d'employer toutes les fonctionnalités de la classe php. Quand tu regarde dans le fichier de cette classe (UploadAjaxABCIServeur.php), tu vois que je récupère le nom du fichier à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->UpAbci_fichier_nom = filter_input(INPUT_POST, 'UpAbci_fichier_nom');
    Tu pourras donc récupérer le nom du fichier original depuis "UploadAjaxABCI_Php_Load.php" en faisant simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom_fichier_original =  filter_input(INPUT_POST, 'UpAbci_fichier_nom'); 
    $nom_fichier_original = rawurldecode($nom_fichier_original);
    et construire toi-même la destination du fichier avec ce nom et le répertoire souhaité, plutôt que d'utiliser la fonction "getFichierDestination()" qui utilise le nom du fichier nettoyé. Il te suffira d'indiquer ensuite cette destination comme argument dans la fonction "Transfert ($destination)" comme dans l'exemple.

    Je te conseille néanmoins d'utiliser des noms de fichiers valides sur le serveur. Si tu dois absolument conserver les noms des fichiers originaux tu pourrais les enregistrer en bdd avec leur nom initial et dans un autre champ de la bdd tu pourrais mettre le nom de correspondance du fichier nettoyé sur le serveur. Cela te garantirait un fonctionnement correct dans tous les cas de figure.

    Citation Envoyé par vilau Voir le message
    Les noms sont encodés, ainsi que le nom du fichier résultant de l'upload "Répétition" au lieu de "Répétition" par exemple.
    Comment puis-je retrouver et conserver ces caractères aussi bien dans les variables $_POST que dans le nom du fichier ?
    Vincent
    Ces caractères bizarres indiquent que tu as un problème d'encodage des fichiers dans lesquels tu as mis les scripts de la classe. Tous les fichiers doivent être encodés au format utf-8. Ce n'est pas un problème propre à la classe, regarde des tutos utf-8 pour respecter toutes les étapes d'un encodage utf-8.

    Sinon pour le reste la prochaine version de cette classe sortira bientôt et je penserai à mettre une fonction qui retourne le nom original du fichier

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Indépendant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 7
    Points
    7
    Par défaut Merci
    Merci pour ton retour. Tout fonctionne désormais comme je le souhaite.

  20. #20
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut Classe d'upload Ajax + php version 2.2
    Bonjour,

    La version 2.2 est en ligne ici !


    3 options de configuration et 2 options d'information ont été ajoutées dans la classe javascript

    - config.requete_upload_fin = false; // booléen true ou false. Si = true, une requête additionnelle est envoyée au script php pour indiquer la fin de traitement de tous les fichiers (excepté si config.requete_sans_fichier = false et qu'aucun fichier n'a été soumis). Utile uniquement côté serveur si besoin.

    - config.max_filesize_utilisateur = null;// taille maximale du fichier utilisateur. Si = 0 ou null aucune vérification n'est faite sur la taille du fichier. Accepte un nombre en octets ou une chaine de caractère formatée avec les unités. Les espaces et la lettre "o" sont optionnels et le formatage ne tient pas compte de la casse. Par exemple 1073741824 = '1073741824o' = '1024Mo' = '1024 M' = '1048576k' = '1048576 Ko' = '1 go' = '1 G'. Les nombres décimaux sont acceptés.

    - config.extensions_autorisees = [];// Tabelau des extensions autorisées. Les variantes majuscules/minuscules sont automatiquement prises en compte. Si le tableau est vide aucune vérification n'est faite.

    - info.status.erreur_taille = 'Dépassement de la taille maximale autorisée. ';// message si dépassement de "config.max_filesize_utilisateur".

    - info.status.erreur_extension = 'Extension non valide. ';// message si l'extension ne fait pas partie du tableau "config.extensions_autorisees".

    Note importante : Les fonctions de contrôle de taille et d'extension des fichiers ont été créées pour faciliter l'expérience utilisateur. Celui-ci n'a plus à attendre la fin de l'upload d'un fragment de fichier pour avoir le message d'avertissement correspondant qui est maintenant instantané. Cependant comme on ne doit pas faire confiance aux contrôles javascript ces mêmes contrôles devraient être refaits par sécurité côté serveur (pas obligatoire pour le fonctionnement du code mais vivement conseillé).



    3 fonctions ont été ajoutées dans la classe php

    - getUploadFin() // qui permet d'exploiter la configuration ajax "config.requete_upload_fin".

    - getFichierNomOriginel() // qui permet de retourner le nom originel du fichier.

    - Return_Octets() // qui facilite la conversion d'une chaine formatée (ex : '1000 Mo', '1 Go', '1.2 G') en octets.



    Tous les fichiers dont le mode d'emploi et le fichier d'exemples ont été mis à jour


    P.S La version 2.2 est la version qui succède à la version 2.0. La version 2.1 est une version interne intermédiaire qui n'a pas été mise en ligne.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 15 1234511 ... DernièreDernière

Discussions similaires

  1. Upload de fichiers par fragments (chunk) - Erreur d'ouverture du fichier temporaire
    Par Kakolio dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 10/07/2015, 18h27
  2. [SP-2007] Upload de gros fichiers par programme
    Par bigboomshakala dans le forum SharePoint
    Réponses: 10
    Dernier message: 31/03/2010, 09h55
  3. [Upload] Upload de GROS fichiers en php
    Par osscour dans le forum Langage
    Réponses: 21
    Dernier message: 26/05/2006, 14h13
  4. [Upload] Problème upload de gros fichiers avec Firefox
    Par the rootsm@n dans le forum Langage
    Réponses: 12
    Dernier message: 19/02/2006, 20h43
  5. [Upload] Upload de gros fichiers
    Par Rémiz dans le forum Langage
    Réponses: 8
    Dernier message: 07/01/2006, 11h44

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