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. #61
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Comment ça mon code n'est pas commenté ? Lequel ?
    Ben... un peu tout... il y a énormément de fonctions imbriquées dans les objets et je suis incapable de savoir à quoi la plupart d'elles servent

    Citation Envoyé par ABCIWEB Voir le message
    En fait il faudrait commencer par le fichier "UploadAjaxABCI.php" qui comprend le plus d'exemples. Et puis il y a un mode d'emploi Alors oui y'a beaucoup de possibilités et donc forcément ça fait de la lecture pour tout personnaliser mais en contre partie on peut faire à peu près ce que l'on veut.
    ...
    Tu vois qu'il suffit de peu de chose pour avoir une version "trépanée" comme tu dis
    Oui ! Et c'est bien parce-que le tout est bien documenté(en plus du fait que ça marche) que je me suis lancé avec ton script... mais j’aimerai tout de même dégraisser ce qui, dans mon cas uniquement, est devenu du code mort.
    Mais ça, c'est mon problème

    Citation Envoyé par ABCIWEB Voir le message
    Pour le renommage des fichiers, cela se situe côté serveur...
    ...
    $up->addStatusOkAjax("renommé ".$nom_final);
    Le fait et que mon propre script(le patient qui attend sa greffe) gère déjà les noms de fichier avec un système de version... le nom imposé, ainsi que le contrôle de doublon, viennent donc de lui (ce qui, ici, rends ceux de ton script redondants).

    Citation Envoyé par ABCIWEB Voir le message
    Sinon pour les fonctions javascript, pour quel usage voudrais-tu les utiliser ?
    La taille du fichier original ne change jamais, et la progression de la taille transférée est montrée en exemple dans le fichier "UploadAjaxABCI.php".
    un petit script valant mieux qu'un long discours, je joint ton script tel que je l'ai actuelement saccagé : [ Upload-Ajax-ABCI-moa.zip ] (je sais que mon code ressemble à une verrue... oui, je sais)
    J'ai commenté les lignes que j'ai ajouté dans ton propre fichier "UploadAjaxABCI_DEV.js" avec des "//moa".
    (mes fautes de frappe et d’orthographe sont en CC-BY-SA)

    En tout cas merci de tes explications, ça va me permettre d'avancé !

  2. #62
    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,

    Ah mais tu parlais des commentaires dans le code de la classe javascript ? Oui, bien entendu tout n'est pas commenté, uniquement l'essentiel aux points sensibles, mais elle n'a pas vocation à être modifiée excepté par des utilisateurs expérimentés s'ils veulent développer d'autres fonctionnalités. Pour le commun des mortels et les utilisations courantes j'ai fait en sorte de proposer tout un tas d'options de configuration qui permettent de faire ce que l'on veut sans avoir besoin de toucher à la classe. Sinon ce serait inabordable pour les débutants et pratique pour personne.

    Sinon concernant les codes d'utilisations et de configurations de la classe javascript ou php, bien entendu là tu as toute latitude pour faire ce que tu veux, c'est le "but du jeu". Par exemple dans le code du fichier "custom" je dis qu'il te suffit de mettre Upload.config.total_max_weight_apercu = 0 pour désactiver l'affichage des vignettes images. La souplesse de cette classe est de pouvoir changer de configuration en changeant un seul paramètre sans avoir besoin de changer tout le reste. Profites Ou sinon bah faut te taper la doc pour voir ce que tu peux supprimer Pratiquement cette option est conçue pour que le développeur puisse facilement utiliser la classe aussi bien sur desktop (beaucoup de puissance donc affichages des vignettes) que sur portable (affichage des vignettes si pas trop lourdes ou éventuellement pas de vignette du tout). En fonction de la détection d'un portable ou d'un ordinateur desktop il suffit de changer cette valeur et c'est tout Après bien sûr tu pourrais aussi supprimer le code html du formulaire faisant référence à l'affichage des vignettes, mais bon tu ne vas gagner que quelques octets et si tu veux faire marche arrière ça va être galère, et niveau fonctionnel le visiteur ne verra pas de différence.

    Le fait et que mon propre script(le patient qui attend sa greffe) gère déjà les noms de fichier avec un système de version... le nom imposé, ainsi que le contrôle de doublon, viennent donc de lui (ce qui, ici, rends ceux de ton script redondants).
    Et où est le problème précisément ? Je t'ai donné une solution pour imposer un nom de fichier. Elle ne te convient pas ? Si non dis pourquoi. Je ne pourrai pas t'aider plus si tu reste aussi vague

    un petit script valant mieux qu'un long discours, je joint ton script tel que je l'ai actuelement saccagé
    Nan ça c'est pas une bonne solution. Déjà parce qu'il ne faut pas modifier la classe elle-même (sauf à être expert et avoir du temps) mais se débrouiller avec les options de configuration, les styles ou les fonctions évènementielles disponibles. Il est probable qu'on puisse faire ce que tu veux en utilisant les outils disponibles plutôt que tenter de modifier la classe elle-même. Dis-moi avec des mots (pas avec du code) exactement ce que tu veux faire - dans quel but tu veux le faire - sinon je pourrai pas t'aider.

  3. #63
    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 Ajax, Crop, Recadrage, Redimensionnement
    Bonjour,

    La version 4.0 est en ligne ici !...

    Grosse mise à jour pour cette nouvelle version

    Nouveaux styles css événementiels :
    - data-upabcicss-infos-serveur (le serveur a envoyé un message vers .UpAbci_infosServer)
    - data-upabcicss-error-img-prev-total (total images supérieur à "config.imgPreviewMaxSizeTotal")
    - data-upabcicss-error-img-prev (taille image supérieure à "config.imgPreviewMaxSize")
    - data-upabcicss-error-user (erreur d'extension ou de taille autorisée)
    - data-upabcicss-remaning-time-compute (s'applique après la durée de config.remainingTimeCompute)

    Nouvelles options de configuration :
    - filesExtensionsInput (permet de filtrer des extensions différentes en cas d'input file multiples)
    - imgPreviewMaxSizeCancelAll (permet d'annuler la prévisualisation de toutes les images si la valeur de config.imgPreviewMaxSize est dépassée pour au moins une image)
    - browserOutdeted (comportement de la classe javascript si navigateur obsolète. Remplace le quatrième paramètre optionnel dans l'initialisation de la classe).

    Nouvelles fonctions javascript événementielles :
    - func_ImgPreviewLoadEach (trigger pour chaque image de prévisualisation disponible et chargée)
    - func_FileSelectAllBefore (trigger pour chaque sélection de fichiers avant l'affichage des informations)
    - func_FileSelectEach (trigger pour chaque fichier après l'affichage de ses informations)
    - func_FileInProgressEach (trigger durant la progression du téléchargement de chaque fichier)
    - func_FileEndEach (trigger à la fin du téléchargement de chaque fichier)

    Toutes les fonctions javascript ont maintenant un accès direct aux paramètres et objets de la classe.
    Cela permet une meilleure interaction avec des scripts externes, et de modifier directement des objets html d'informations sans avoir besoin de parser le DOM.

    A cette occasion je donne deux exemples de crop multiples (fonctionnels) qui utilisent les fonctions événementielles en relation avec le module "jquery imgAreaSelect"

    L'exemple "custom" a également été amélioré


    Cette version n'est pas compatible avec les précédentes, tous les paramètres et fonctions on été renommés (c'était nécessaire). Je laisse la V3.0c en ligne encore quelques temps car c'est la dernière version compatible avec les précédentes.

    En complément des nouvelles fonctionnalités, la version 4.0 apporte quelques petites améliorations et corrections :
    Amélioration :
    Toutes versions : en cas de contrôle de l'extension ou de la taille des fichiers, l'affichage de l'erreur est maintenant immédiate.
    Apparavant les fichiers n'étaient pas soumis mais il fallait appuyer sur le bouton d'envoi pour voir s'afficher le message correspondant.

    Corrections :
    - Version 3.0c uniquement : les boutons de sélection de fichiers ne se mettaient plus en disable lors de la soumission du formulaire comme dans les versions précédentes. Ce problème n'affectait pas les boutons files customisés qui fonctionnaient comme prévu. Corrigé.
    - Toutes versions : en cas de champs de type file multiples, le status arrêt d'un fichier provenant d'un premier champ était annulé si on re sélectionnait des fichiers depuis un autre champ. Corrigé.

    Le mode d'emploi a été mis à jour

  4. #64
    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,

    Version 4.0b en ligne.

    Correction du mode d'emploi :

    - La classe propose un css événementiel nommé "data-upabcicss-infos-server" alors que le mode d'emploi indiquait "data-upabcicss-infos-serveur".

    Certaines petites erreurs marginales ont également été corrigées dans les commentaires et le mode d'emploi.

    J'en ai profité pour ajouter une page de présentation concernant la personnalisation de l'affichage des informations. Ce sera plus clair notamment pour les utilisateurs débutants

  5. #65
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour!

    Tout d'abord bravo pour ton travail qui est admirable!

    Je souhaite exécuter du code php à partir du moment où le téléchargement est terminé (un code pour mettre les fichiers dans une base de donnée et renommer les fichiers et autres choses...).

    Pour le code php je n'ai pas de souci, par contre je n'ai aucune connaissance en javascript...

    J'ai essayé de coller un code php en fin de la page UploadAjaxABCI_Basique.php mais il n'est pas pris en compte. Je n'ai pas trouvé d'indication dans le fichier d'aide...

    Est-il possible de déclencher un code php quand le téléchargement est terminé? si oui comment?

    Merci!

  6. #66
    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,

    En plus du mode d'emploi il faut regarder le code source des fichiers d'exemples et évidemment ce n'est pas dans le fichier "basique" que tu trouveras le plus de renseignements...

    Regardes plutôt par exemple le fichier "UploadAjaxABCI.php" et son correspondant côté serveur "UploadAjaxABCI_Php_Load.php".

    1/ Pour enregistrer/renommer le nom des fichiers il est plus pratique et sécurisé de faire l'opération à la fin du traitement de chaque fichier (dans le cas d'upload multiple). Pour ce faire dans le fichier d'exemple "UploadAjaxABCI_Php_Load.php" on peut utiliser la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($up->getTransfertOk())
    2/ Sinon pour faire un traitement complémentaire php une fois le formulaire entièrement terminé, voir le formulaire numéro cinq dans le fichier "UploadAjaxABCI.php". Il suffit de configurer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form5.config.queryFormEnd = true;
    qui envoie une requête complémentaire de fin de traitement vers le serveur et côté serveur (fichier "UploadAjaxABCI_Php_Load.php") on pourra déclencher le code php dans la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (count($up->UpAbci_formEnd) > 0)
    3/ Une troisième possibilité est de configurer une fonction javascript événementielle (donc côté client) qui s'exécutera une fois le traitement du formulaire terminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Up.config.func_FormEnd = function()
    {
    // ici tu pourrais appeler un script php en ajax pour faire un autre traitement
    }
    Des exemples d'utilisation des fonctions événementielles sont donnés dans l'exemple "custom" et les deux exemples de "crop".

    Tu vois donc que ton besoin a été anticipé

    Par contre, il n'est pas facile de faire un mode d'emploi qui réponde à des questions qui peuvent se poser en différents termes suivant le problème et le niveau de chacun. Aussi il est parfois indispensable de fouiller dans les exemples.

    Je te remercie de ta question générique. Cela me donne l'idée de faire une "faq" que je mettrai en place dans les prochaines versions pour compléter le mode d'emploi

  7. #67
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Super ça marche !
    J’ai choisi ta solution 2) et après quelques heures de boulot depuis hier ça fonctionne.

    A titre informatif, je t’indique ce qui m’a fait le plus transpirer en tant que mec qui bricole depuis peu en php et qui ne connait rien en javascript :
    - Repérer l’endroit où le fichier final est nommé (j’ai confondu avec l’endroit où le message donnant le nom du fichier modifié apparaît)
    - Comprendre que certaines variables ne sont pas « valables » sur toute la page, j’ai ainsi du créer des variables de session pour pouvoir les utiliser dans ma base de données ensuite ( $nom_final et filesize($fichier_complet) ).
    Ce qui est sur c’est que sans ta réponse d’hier soir je n’aurais jamais trouvé…
    En tous cas merci et bravo encore pour ton travail !

  8. #68
    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,

    En cas d'upload multiple, normalement on utilise plutôt la solution 1/ et éventuellement en complément la solution 2/.

    Si par exemple tu n'enregistre l'adresse de tes fichiers en bdd qu'une fois tout le formulaire terminé, il est possible que certains fichiers soient téléchargés mais que l'upload soit arrêté avant la fin de tout le traitement ce qui pourrait créer des incohérences dans ton système. Autre cas de figure si tu as un problème internet (perte de connexion etc) tes variables de session seront niquées. C'est pour cela que je dis que dans la plupart des cas la solution 2/ peut compléter la première mais plus difficilement la remplacer. Par ailleurs cela t'aurais peut-être permis d'éviter de créer des variables de session.

    Enfin bon je ne connais pas ton problème en détail, j'insiste au cas où car il faut bien prendre en compte l'éventualité que le processus puisse être en partie traité mais arrêté avant la fin de tout le traitement

  9. #69
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    D'abord je te remercie pour ce script, car je suis sur un serveur mutualisé et il me permet de passer outre la limitation de taille et de nombre de fichier que je peux uploader.
    Par contre, j'essaie (désespérément ^^) d'y ajouter une fonction de création de miniature et une création de .zip.
    Voici la partie du code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if($up->getTransfertOk())
    {
    	function imagethumb($image_src, $image_dest, $max_size = 150, $expand = false, $square = false)
    		{
    			if( !file_exists($image_src) )
    			{
    				echo "<br/>".$image_src;
    				return FALSE;
    			}
                     }
    }
    Ce code est mis dans la page "UploadAjaxABCI_Php_Load_Custom.php", juste avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $up->exitReponseAjax();
    Je vérifie le contenu de la variable "$image_src", il amène bien vers le nom de fichier que je souhaite traiter, mais le script me renvoie que le fichier n'existe pas. Pourtant j'ai bien(?) utilisé la méthode 1/ dont tu parles un peu plus haut.
    Est-ce que toi ou quelqu'un d'autre saurait comment régler ça ?
    Merci d'avance !

    PS: Je me débrouille en php, mais je ne connais rien en js (merci pour les explication en commentaires dans tes fichiers d'ailleurs !).

  10. #70
    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,


    Pour faire des miniatures regarde plutôt les exemples de redimensionnements, c'est fait pour ça.

    Si tu veux te servir du formulaire customisé et l'utiliser pour faire des redimensionnements, étant donné que le redimensionnement se fait uniquement côté serveur, tu peux te servir du fichier "UploadAjaxABCI_Custom.php" et lui mettre le fichier "UploadAjaxABCI_Php_Load_Redimensions_optimise.php" comme fichier de destination.

    Donc dans le fichier "UploadAjaxABCI_Custom.php" tu remplaces la ligne d'initialisation de la classe javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Upload = new UploadAjaxABCI('#form_custom','Php_Upload/UploadAjaxABCI_Php_Load_Custom.php','.infos_form');
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Upload = new UploadAjaxABCI('#form_custom','Php_Upload/UploadAjaxABCI_Php_Load_Redimensions_optimise.php','.infos_form');
    Ensuite puisqu'il te faut des images autant les vérifier avant l'envoi du formulaire. Donc à la ligne suivante dans ce même fichier tu peux remplacer la ligne en commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Upload.config.filesExtensions = ['jpg','jpeg','png','mp4','avi','mpg','m2ts','mkv','flv','mp3'];
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Upload.config.filesExtensions = ['jpg','jpeg','png'];
    Et voilà c'est tout, l'exemple de formulaire customisé fait maintenant du redimensionnement d'images On peut difficilement faire plus simple

    C'est dans le code php de "UploadAjaxABCI_Php_Load_Redimensions_optimise.php" que tu pourras choisir les dimensions et le nombre de vignettes etc. Dans cet exemple php fait trois redimensionnements, à toi d'ajuster pour faire ce que tu veux.

    Concernant le zip, ouvres un sujet dans le forum php pour savoir comment faire un zip, il faut aussi que cette fonctionnalité soit activée sur ton serveur (elle est activée très souvent).

  11. #71
    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 Fonction évènementielle config.func_FormEnd
    Bonjour,
    En regardant cette fonction, dans le tableau récupéré, le nom de fichier est le nom d'origine. Comment peut-on récupéré le nom de fichier "nettoyé" ?
    Sinon, a-t-on accès à la fonction de nettoyage pour convertir le nom de fichier en nom nettoyé ?
    Après l'upload, je souhaite récupérer le nom du fichier tel qu'il a été stocké pour le passer directement en pièce jointe d'un mail généré depuis le serveur, mais pas en exécutant cette fonction mail dans le code php d'upload.
    Merci d'avance pour ta réponse, sans soucis si cela n'est pas possible car il y a toujours d'autres solutions pour réaliser ce que je souhaite faire.

  12. #72
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Merci pour ta réponse, mais je cherche en fait à uploader une image dans un dossier ET à en créer une miniature dans un autre dossier.
    J'ai essayé de bidouiller ton script (mélange de "UploadAjaxABCI_Php_Load_Custom.php" et "UploadAjaxABCI_Php_Load_Redimensions_optimise.php"), mais je ne suis pas arrivé à grand chose : /
    Est-ce que tu aurais une piste pour me débloquer ?
    Pour la fonction zip, j'en ai déjà une qui marche, mais j'essaierai de l'implémenter à ton script quand j'arriverai à le faire marcher correctement
    Merci d'avance !

  13. #73
    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
    @vilau

    Salut,

    config.func_FormEnd peut retourner trois paramètres : tableau, info_serveur, mixte_serveur.
    cf : exemples "UploadAjaxABCI_Controle_input_text.php" et "UploadAjaxABCI_Php_Load_Controle_input_text.php".

    -"tableau" est le tableau généré en javascript.
    - "info_serveur" récupère le contenu qu'on envoie avec la fonction serveur "addInfosServer" (si besoin) et qui sera affiché dans le bloc html ayant la class="UpAbci_infosServer"
    - "mixte_serveur" récupère le contenu qu'on envoie avec la fonction serveur "addMixteServer" (si besoin). Ce contenu peut être du texte, du html ou un tableau php qui sera transformé en objet javascript. Il n'est pas utilisé dans la classe javascript, c'est une variable libre que tu peux utiliser comme tu veux.

    Donc côté php tu peux construire un tableau pour récupérer ce que tu veux, par exemple :

    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
     
    //...
    if($up->getFragment()) 
    {
    //..
    // getFileDestination() retourne $adresse_relative.$dossier_destination.$fichier nettoyé 
    $destination_fichier = $up->getFileDestination();
     
    // getCleanFileName() retourne le nom du fichier nettoyé
    $fichier_nettoye = $up->getCleanFileName();
    //...
    $mixte_serveur = array('fichier_net'=>$fichier_nettoye,'fichier_dest'=>$destination_fichier);
    $up->addMixteServer($mixte_serveur);
    //..
    }
     
    //...
    $up->exitReponseAjax();
    et côté javascript tu pourras récupérer tes valeurs en faisant par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //...
    up.config.func_FormEnd = function(tableau,info_serveur,mixte_serveur)
    {
    var fichier_nettoye = mixte_serveur != undefined && mixte_serveur.fichier_net != undefined ? mixte_serveur.fichier_net : false;
    var fichier_destination = mixte_serveur != undefined && mixte_serveur.fichier_dest != undefined ? mixte_serveur.fichier_dest : false;
    //...
    }
    Donc pour résumer le paramètre "tableau" sera toujours renseigné (même si on est pas obligé de l'utiliser), par contre les paramètres "info_serveur" et "mixte_serveur" seront disponibles uniquement si on utilise les fonctions "addInfosServer" et "addMixteServer" côté serveur

  14. #74
    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 MangeMouette Voir le message
    Merci pour ta réponse, mais je cherche en fait à uploader une image dans un dossier ET à en créer une miniature dans un autre dossier.
    J'ai essayé de bidouiller ton script (mélange de "UploadAjaxABCI_Php_Load_Custom.php" et "UploadAjaxABCI_Php_Load_Redimensions_optimise.php"), mais je ne suis pas arrivé à grand chose : /
    Est-ce que tu aurais une piste pour me débloquer ?
    Alors utilises plutôt le fichier "UploadAjaxABCI_Php_Load_Redimensions.php" comme fichier de destination serveur. En bas de ce script il y a des commentaires pour conserver l'image originale et faire une vignette.

  15. #75
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Super, ca marche nikel !
    Merci beaucoup pour ton script et tes réponses : )

  16. #76
    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 pour les explications sur le tableau et comment y passer ce que l'on souhaite.

  17. #77
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Un petit retour et quelques questions : )
    D'abord le retour : les miniatures créées pour des .png ne prennent pas en compte la transparence et sont bizarrement créées :
    Nom : a.jpg
Affichages : 233
Taille : 208,1 Ko

    D'autre part, la miniaturisation ne marche pas avec des .gif. Est-ce possible de changer ça ?
    Et j'ai ajouté ma fonction pour créer un zip et y ajouter les fichiers uploadés. Mais la fonction se lance pour chaque fichier et ça finit par prendre du temps d'ouvrir/fermer l'archive à chaque fois.
    J'ai essayé d'ouvrir l'archive une seule fois, à l'envoie du formulaire, d'y ajouter les fichiers uploadés un par un et de la fermer quand le formulaire est fini. Mais je n'ai pas trouvé où mettre mon code d'ouverture/fermeture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $zip = new ZipArchive();
    $zip->open("../../".$dir.$here[$num].'.zip' , ZipArchive::CREATE);
     
    et
     
    $zip->close();

  18. #78
    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,

    J'ai pris la fonction de redimensionnement ici, donc le bureau des réclamations serait plutôt ici.
    Enfin en attendant j'ai complété pour pouvoir faire des redimensionnements de gif:

    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
    function fctredimimage($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src, $extension_Src) 
    {
    		//Suppose une image valide. Si l'image n'est pas redimensionnée, elle est simplement optimisée pour le web avec une qualité de 90
     
    	$condition = 0;
    	// Si certains paramètres ont pour valeur '' :
    	if ($rep_Dst=='') { $rep_Dst = $rep_Src; } // (même répertoire)
    	if ($img_Dst=='') { $img_Dst = $img_Src; } // (même nom)
     
    	$ext_redim = array('jpg','jpeg','png','gif');
     
    	if(!in_array($extension_Src,$ext_redim)) return false;
    	// ---------------------
     
    	// récupération des dimensions de l'image Src
    	$img_size = @getimagesize($rep_Src.$img_Src);
    	$W_Src = $img_size[0]; // largeur
    	$H_Src = $img_size[1]; // hauteur
     
    	if(empty($W_Src) || empty($H_Src)) return false;
    	// ------------------------
    	// condition de redimensionnement et dimensions de l'image finale
    	// ------------------------
    	// A- LARGEUR ET HAUTEUR maxi fixes
    	if ($W_max!=0 && $H_max!=0) 
    	{
    		$ratiox = $W_Src / $W_max; // ratio en largeur
    		$ratioy = $H_Src / $H_max; // ratio en hauteur
    		$ratio = max($ratiox,$ratioy); // le plus grand
    		$W = $W_Src/$ratio;
    		$H = $H_Src/$ratio;   
    		$condition = ($W_Src > $W) || ($H_Src > $H); // 1 si vrai (true)
    	}
    	else //  B- HAUTEUR maxi fixe
    	if ($W_max==0 && $H_max!=0) 
    	{
    		$H = $H_max;
    		$W = $H * ($W_Src / $H_Src);
    		$condition = ($H_Src > $H_max); // 1 si vrai (true)
    	}
    	else //  C- LARGEUR maxi fixe
    	if ($W_max!=0 && $H_max==0) 
    	{
    		$W = $W_max;
    		$H = $W * ($H_Src / $W_Src);         
    		$condition = ($W_Src > $W_max); // 1 si vrai (true)
    	}
     
    	switch($extension_Src) 
    	{
    		case 'jpg':
    		case 'jpeg': $Ress_Src = @imagecreatefromjpeg($rep_Src.$img_Src); break;
    		case 'png': $Ress_Src = @imagecreatefrompng($rep_Src.$img_Src); break;
    		case 'gif': $Ress_Src = @imagecreatefromgif($rep_Src.$img_Src); break;		
    		default : $Ress_Src = null;
    	}
     
    	if(!is_resource($Ress_Src)) return false;
     
    	// ---------------------------------------------
    	// REDIMENSIONNEMENT si la condition est vraie
    	// ---------------------------------------------
    	// - Si l'image Source est plus petite que les dimensions indiquées :
    	// Par defaut : PAS de redimensionnement mais optimisation pour le web
    	// On peut "forcer" le redimensionnement pour agrandissement en ajoutant ici :
    	// $condition = 1; (risque de perte de qualité)
     
    	// creation de la ressource-image "Src" en fonction de l extension
     
    	if ($condition == 1) 
    	{
    		// creation d une ressource-image "Dst" aux dimensions finales
    		// fond noir (par defaut)
    		switch($extension_Src) 
    		{
    			case 'gif':
    			case 'jpg':
    			case 'jpeg': 	$Ress_Dst = @imagecreatetruecolor(round($W),round($H));
     
    							if(!is_resource($Ress_Dst)) return false;
    							break;
     
    			case 'png': 	$Ress_Dst = @imagecreatetruecolor(round($W),round($H));
    							if(!is_resource($Ress_Dst)) return false;
     
    							// fond transparent (pour les png avec transparence)
    							imagealphablending($Ress_Dst, false);
    							imagesavealpha($Ress_Dst, true);
    							$trans_color = @imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
    							@imagefill($Ress_Dst, 0, 0, $trans_color);
    							break;
     
    			default : $Ress_Dst = null;
    		}
     
    		// REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne)
    		$redim = @imagecopyresampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, round($W), round($H), round($W_Src), round($H_Src)); 
    		if ($redim == false) return false;
    	}
    	else
    	{
    		$Ress_Dst = $Ress_Src;
    	}
     
    	// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
    	switch ($extension_Src) 
    	{ 
    		case 'jpg':
    		case 'jpeg': $image = @imagejpeg ($Ress_Dst, $rep_Dst.$img_Dst, 90); break;
    		case 'png': $image = @imagepng ($Ress_Dst, $rep_Dst.$img_Dst,1); break;
    		case "gif" : $image = @imagegif($Ress_Dst, $rep_Dst.$img_Dst); break;
     
    		default : $image = false;
    	}
     
    	if ($image == false) return false;
    	// ------------------------
    	// liberation des ressources-image
    	@imagedestroy ($Ress_Src);
    	@imagedestroy ($Ress_Dst);
     
    	return true;
    }
    En complément j'ai rajouté dans le code ci-dessus la ligne "imagealphablending($Ress_Dst, false);" pour essayer d'améliorer la conservation de la transparence des png, mais sans grande conviction parce que chez moi la fonction originale (donc sans cette ligne) respectait bien la transparence des png. Faudrait que je puisse faire le test avec tes images sinon je peux rien voir puisque chez moi ça marche...

    Aussi à la ligne case 'png': $image = @imagepng ($Ress_Dst, $rep_Dst.$img_Dst,1); break; le paramètre "1" désigne la qualité de compression du png. Essaies de mettre à 0 si tu veux gagner en qualité (les png ne seront alors pas compressés).

    Pour le zip tu veux faire quoi ? un zip avec les images originales uploadées ?

  19. #79
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Marche toujours pas pour les png, ni pour les gifs : /
    Je vais aller jeter un coup d'oeil sur les liens que tu m'as donné : )
    J'utilise ces images : http://brsev.deviantart.com/art/Token-128429570

    Et pour les zip, oui, je veux un zip avec les images originales.
    Actuellement je le fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $zip = new ZipArchive();
    $zip->open("../../".$dir.$here[$num].'.zip' , ZipArchive::CREATE);
    $zip->addFile("../../".$dir.$non_fichier.'.'.$extension_fichier, $here[$num].'/'.$non_fichier.'.'.$extension_fichier);
    $zip->close();
    Code mis juste avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $up->exitReponseAjax();
    Dans le fichier "UploadAjaxABCI_Php_Load_Redimensions.php".

  20. #80
    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
    1/ Fais moi un zip avec tes images que le puisse les télécharger directement (il y a une option pour ajouter des pièces jointes dans les outils de formatage au dessus de la boite de saisie des messages dans ce forum).

    2/ Donnes-moi tout ton code php d'upload pour que je regarde la mise en place de ta fonction zip.

+ Répondre à la discussion
Cette discussion est résolue.

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