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. #81
    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
    1/ Ce sont exactement les même images que celles du lien et je n'arrive pas à envoyer mon zip ("Les erreurs suivantes sont survenues :icone.zip. Echec de l'envoie du fichier").

    2/ Bin mon code php d'upload c'est ton fichier "UploadAjaxABCI_Php_Load_Redimensions.php" dont j'ai modifié la fin :
    Code php : 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
    // Sauvegarde du fichier original
    $destination_fichier = $dossier_dest_serveur.$non_fichier.'.'.$extension_fichier;
    $transfert = $up->Transfert($destination_fichier);
    if($transfert && !@chmod($destination_fichier,0604))
    {
    	$up->exitStatusErreur("Echec de la configuration des droits d'accès du fichier.");
    }
     
    ////////////////////////
    //AJOUT FICHIER AU ZIP//
    ////////////////////////
    $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();
    }
    }
    // Voir le fichier "UploadAjaxABCI_Php_Load.php" pour des possibilités supplémentaires...
    $up->exitReponseAjax();
    ?>
    (les deux '}' à la fin viennent du code plus haut, c'est pas une erreur)

    3/ J'en profite pour te demander comment vérifier si le fichier existe déjà dans le dossier de destination AVANT de commencer à l'uploader.
    Dans ton code j'ai mis ça, mais ca ne teste qu'une fois le fichier uploadé, même si je l'ai mis avant le "$up->Upload();" :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	$test_fichier = "../../".$dir.$nom_fichier_nettoye;
     
    	if(is_file($test_fichier))
    	{
    		$up->exitStatusErreur('Ce fichier existe déjà.');		
    	}
     
    	// Upload dans le dossier temporaire
    	$up->Upload();

  2. #82
    Expert éminent sénior

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

    1/ Je t'envoies un lien de téléchargement vers mon serveur par message privé. Tu ne seras pas dépaysé c'est le module d'upload que tu utilises. Envoies moi les photos qui te posent problème. Le lien est valide jusqu'à demain minuit.

    2/ Montres-moi TOUT ton code d'upload côté serveur. Faut que j'ai une vue d'ensemble complète.

    3/ Tel quel on ne peut pas savoir si un fichier existe avant de commencer à l'uploader car il faut aller côté serveur pour avoir cette information, c'est impossible depuis javascript.
    Ou alors il faut faire une requête ajax sur le onchange du bouton de sélection des fichiers avant l'envoi du formulaire. On verra ça plus tard quand le reste sera au point.
    De toute façon il faut refaire le contrôle dans le code d'upload, donc fais-moi voir TOUT ton code d'upload côté serveur, je vais pas m'y reprendre en cinquante fois... (et penses à m'envoyer ces photos sur le lien que je t'envoies par mp d'ici trois minutes).

  3. #83
    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
    1/ Images envoyées.

    2/ TOUT mon code d'upload côté serveur
    Ma page d'envoie (UploadAjaxABCI_Custom.php) :
    Code html : 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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    <?php
    /*UploadAjaxABCI Custom
     
    Utilise le fichier "Php_Upload/UploadAjaxABCI_Php_Load.php" comme destination ajax
     
    -------------------------------------------------------- 
    */
    session_start();
    header('Content-type: text/html; charset=UTF-8');
     
    function Unique_Id()
    {
            return function_exists('openssl_random_pseudo_bytes')? hash("sha256",openssl_random_pseudo_bytes("128", $cstrong)) : hash("sha256",uniqid(rand(), true));
    }
     
    function Return_Octets($val)
    {
            $val = str_replace(array(',',' '),array('.',''),$val);
            $val = rtrim($val, "oO");
     
            $last = strtolower(substr($val,-1));
     
            switch($last)
            {
                    case 't':  $val *= 1024;
                    case 'g':  $val *= 1024;
                    case 'm': $val *= 1024;
                    case 'k':  $val *= 1024;
            }
            return $val;
    }
     
    $UpAbci_fragmentSize = Return_Octets('8M'); /* Taille maximale des fragments de fichier. Détermine la fréquence de sauvegarde du fichier en cours d'upload (le fichier temporaire est sauvegardé à chaque fragment complet envoyé) et donc le nombre de requêtes ajax nécessaires à l'upload total. Utile pour limiter la taille des fragments pour les serveur qui ont une valeur "upload_max_filesize" importante sinon les sauvegardes seraient peu fréquentes. Par ailleurs chaque fragment est lu en mémoire pour être compilé dans le fichier temporaire, il faut donc auusi prendre en compte l'occupation mémoire. On peut augmenter cette valeur suivant la vitesse d'upload et les capacités du serveur. Cette valeur doit évidemment être inférieure à "upload_max_filesize" sinon elle n'est pas prise en compte dans le code ci-dessous.
     
    Note : la taille réelle des fragments sera inférieure de 10Ko par rapport à la valeur indiquée car je décompte arbitrairement 10Ko pour tenir compte des éléments textuels de la requête ajax.
    */
     
     
    $upload_max_filesize = ini_get('upload_max_filesize');
    $upload_max_filesize = !empty($upload_max_filesize) ? $upload_max_filesize : '4M';// si ini_get est désactivé 4 Mo = valeur minimum courante 
    $upload_max_filesize = Return_Octets($upload_max_filesize);
    $UpAbci_fragmentSize = !empty($UpAbci_fragmentSize) && $upload_max_filesize > $UpAbci_fragmentSize ? $UpAbci_fragmentSize : $upload_max_filesize;
     
    $UpAbci_uniqidForm = Unique_Id();
     
    // Jeton de formulaire
    $_SESSION['UploadAjaxABCI'][$UpAbci_uniqidForm] = 1;
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    	<head>
    		<meta charset="UTF-8" />
    		<link rel="stylesheet" type="text/css" href="../../style.css">
    	</head>
    	<body>
    		<form id = "form_custom" action = "#" method = "post">
    			<input type="file" multiple="multiple" name="upload" />
    			<input type="hidden" value="<?=$UpAbci_uniqidForm?>" name="UpAbci_uniqidForm" />
    			<input type="hidden" value="<?=$UpAbci_fragmentSize?>" name="UpAbci_fragmentSize" />
     
    			<p class="bouton_custom_file">Cliquez ou déposez vos fichiers ici</p>
     
    			<!-- Je pourrais utiliser data-upabcicss-select-file="display:block" dans le bloc ci-dessous pour afficher directement les fichiers dès leur sélection. Je vais utiliser la fonction javascript événementielle "func_FileSelectAll" et exécuter un slide (glissement) -->
    			<div class="content">
    				<div class="infos_form">
     
    					<!--<div>Ici si besoin vous pourriez ajouter des input de type "text" ou autre </div>
     
    					Pour ajouter des champs spécifiquew à chaque fichier voir les exemples de Crop
    					-->
     
     
    					<div class="UpAbci_infosFile">
    					<!--A noter que l'affichage des vignettes n'est pas instantanné et peut donc produire un redimensionnement continu du bloc d'information lors de leur affichage. Pour réserver la hauteur nécessaire, qui doit être (au moins) égale à la configuration javascript ".config.imgPreviewMaxHeight"), on peut appliquer le style événementiel "data-upabcicss-image-preview" qui s'appliquera uniquement si le fichier soumis est une image et si les limitations ".config.imgPreviewMaxSizeTotal" et ".config.imgPreviewMaxSize" ne sont pas dépassées.
    					Vous verrez dans le code javascript qu'on peut faire autrement, mais c'est une méthode simple sans besoin d'utiliser des fonctions javascript.
    					-->
    						<div style="position:relative;padding-bottom:0.35em" data-upabcicss-image-preview="height:70px">
     
    							<!-- vignette aperçu (ne s'affichera que si c'est une image) --> 
    							<span style="display:inline-block" class="UpAbci_imgPreview" data-upabcicss-image-preview="width:100px"></span>
     
    							<!-- progression graphique --> 
    							<progress class="UpAbci_progressionG" data-upabcicss-in-progress="display:inline" data-upabcicss-result="display:none" data-upabcicss-result-partial="display:inline" data-upabcicss-backup="display:inline"></progress>
     
    							<!-- status en cours --> 
    							<span class="UpAbci_status" style="display:none" data-upabcicss-in-progress="color:#090;display:inline" data-upabcicss-result="display:none"></span>
     
    							<!-- sauvegarde résultat partiel --> 
    							<span style="display:none" data-upabcicss-result-partial="display:inline;color:#916C00"> sauvegardé : </span><span class="UpAbci_backup" style="display:none" data-upabcicss-result-partial="display:inline"></span>
     
    							<!-- temps restant -->
    							<span style="display:none" data-upabcicss-remaining-time-after="display:inline" data-upabcicss-result="display:none"> temps restant : </span><span class="UpAbci_remainingTime" style="display:none" data-upabcicss-remaining-time-after="display:inline" data-upabcicss-result="display:none"> - </span>
     
    							<!-- si téléchargement ok on affiche un rond vert -->       
    							<span class="symbol_rond" style="background-color:#0C0;" data-upabcicss-result-ok="display:block"></span> 
     
    							<!-- si erreur ou arrêt on affiche un rond rouge sauf s'il existe une sauvegarde suite à l'arrêt -->       
    							<span class="symbol_rond" style="background-color:#F00;" data-upabcicss-result-stop="display:block" data-upabcicss-result-error="display:block" data-upabcicss-result-partial="display:none" ></span>
     
    							<!-- si sauvegarde on affiche un rond jaune-orange -->       
    							<span class="symbol_rond" style="background-color:#FC0;" data-upabcicss-result-partial="display:block"></span>     
    						</div>
     
    						<div style="padding-bottom:0.3em;min-height:2.7em">
    							<input type="button" class="UpAbci_stop arret" style="display:inline-block;width:4em" data-upabcicss-result="cursor:default;opacity:0.4" value="arrêt" />
     
    							<!-- nom du fichier -->
    							<span class="UpAbci_name"></span>
     
    							<!-- taille du fichier -->
    							<span class="UpAbci_size">0Mo</span>
     
    							<!-- status arrêt ou erreur, data-upabcicss-result-ok sert pour afficher le nouveau nom du fichier s'il a été renommé --> 
    							<p class="UpAbci_status" style="display:none" data-upabcicss-result-stop="color:red;display:inline-block" data-upabcicss-result-error="color:red;display:inline-block" data-upabcicss-result-ok="color:#916C00;display:block;font-size:0.9em"></p>     
    						</div>
    					</div>
    					<div style="margin-top:1.5em;height:4em;">
    						<div>
    							<!-- arrêter tout -->
    							<input type="button" value="Arrêter tout" class="UpAbci_stopAll" style="float:left;width:75px" data-upabcicss-form-end="cursor:default;opacity:0.4" />
     
    							<!-- bouton fermer -->
    							<input type="button" value="Fermer" class="fermer_formulaire arret" style="float:right;width:55px" data-upabcicss-submit="cursor:default;opacity:0.4" data-upabcicss-form-end="cursor:pointer;opacity:1" />
     
    							<!-- bouton envoyer -->
    							<input type="submit" class="submit" value="Envoyer" style="width:120px;font-size:1.2em;display:block;margin:auto;" data-upabcicss-form-end="display:none" />
     
    						<!-- s'affichera uniquement en fin de traitement du formulaire à la place du bouton envoyer -->
    							<input type="button" class="submit fin_traitement" style="width:120px;font-size:0.9em;display:none;margin:auto" data-upabcicss-form-end="display:block" value = "Traitement terminé" />         
    						</div>
     
     
    						<!-- Retour d'informations générales du formulaire alimenté par retour ajax. Le fichier php de traitement (UploadAjaxABCI_Php_Load.php) renvoie pour l'instant 'Aucun fichier traité' si aucun fichier n'a été soumis. Dans le contexte de ce formulaire, puisque le bouton d'envoi du formulaire ne s'affiche qu'après avoir soumis des fichiers, il faut arrêter tous les fichiers avec le bouton "arrêt" avant la soumission du formulaire pour obtenir ce message. 
    						Par ailleurs le script javascript plus bas retourne le nombre de fichiers téléchargés. 
    						-->
    						<div class="UpAbci_infosServer" style="display:none;clear:both;font-size:1.3em" data-upabcicss-infos-server="display:block"></div>
    					</div>
    				</div>
     
    				<!-- info si une sauvegarde existe à la fin du traitement de tous les fichiers. Je vais utiliser la fonction javascript événementielle "func_FormEnd()" pour faire un slide -->     
    				<div class = "backupend" style="display:none;padding:0.5em;font-size:0.7em;background:#FC0">
    				Les fichiers partiellement sauvegardés peuvent être complétés pendant 24h.
    				</div> 
     
    			</div>
    			<p class="retour_galerie"><a href="" onclick="javascript:history.back();">Revenir à la galerie.</a></p>
     
    		</form>
    		<script src="Javascript/jquery.js"></script>
    		<!-- UploadAjaxABCI.js est la version minifiée de UploadAjaxABCI_DEV.js -->
    		<script src="Javascript/UploadAjaxABCI.js"></script>
     
    		<script type="text/javascript"> 
                    $(function(){
                                    
                    var Upload = new UploadAjaxABCI('#form_custom','Php_Upload/UploadAjaxABCI_Php_Load_Redimensions.php','.infos_form');
                    
                    // Si vous faites un contrôle des extensions (recommandé), vous devez refaire ce même contrôle côté serveur par sécurité.
                    //Upload.config.filesExtensions = ['jpg','jpeg','png','mp4','avi','mpg','m2ts','mkv','flv','mp3'];
                    
                    // Attention il conviendrait de baisser (ou mettre à zéro) la valeur ci-dessous pour les smartphones.
                    Upload.config.imgPreviewMaxSizeTotal = 100; // en Mo poids total maximum de toutes les photos. Au delà les vignettes ne seront pas affichées.
                    
                    // (Les valeurs par défaut sont 90 et 60)
                    Upload.config.imgPreviewMaxWidth = 90; // en pixels, largeur maximale de l'aperçu
                    Upload.config.imgPreviewMaxHeight = 60;// en pixels, hauteur maximale de l'aperçu
                    
                    // Je désactive l'affichage automatique des vignettes pour attendre la fin de l'ouverture de la boite. J'emploierai plus bas la fonction "func_ImgPreviewStartAll()" pour afficher les vignettes en temps voulu. En mettant true vous observerez directement la différence d'affichage à l'ouverture de la boite (saccades) surtout visible si vous télécharger plusieurs images de plusieurs Mo
                    Upload.config.imgPreviewStartAuto = false;
                    
                    // Option pour indiquer un élément html en remplacement du bouton de sélection des fichiers par défaut du navigateur.
                    Upload.config.customFileSelect = ".bouton_custom_file";
                    
                    // Durant le téléchargement des fichiers, applique ces effets sur le bouton d'envoi du formulaire.
                    Upload.config.cssSubmitOn = "cursor:wait;opacity:0.4";
                    
                    // Durant le téléchargement des fichiers, applique ces effets le bouton de sélection des fichiers.
                    Upload.config.cssFileSelectOn = "cursor:wait;opacity:0.7;color:#222";
                    
                    
                    // Ici je défini des nouvelles variables dans l'objet ".config". Elle me serviront plus bas dans le code. Cette méthode peut être utilisée pour conserver le même espace de nom et éviter des conflits de variables avec des scripts externes. Cependant, il faut penser impérativement à préfixer le nom des variables avec des caractères suffisamment originaux pour ne pas entrer en conflit avec des variables de configuration internes. Ici j'ai choisi "perso_". 
                    Upload.config.perso_form = $("#form_custom");
                    Upload.config.perso_content = Upload.config.perso_form.find(".content");
                    Upload.config.perso_select = Upload.config.perso_form.find(Upload.config.customFileSelect);
                    Upload.config.perso_select_texte = Upload.config.perso_select.text();
                    Upload.config.perso_select_remplacement = "Traitement en cours...";
                    Upload.config.perso_slideUp = function(){Upload.config.perso_content.slideUp(400)};
                    Upload.config.perso_fermer_formulaire = $();
                    
                    
                    // Définition d'une fonction javascript événementielle "config.func_FileSelectAll" qui sera exécutée à la soumission des fichiers.
                    
                    Upload.config.func_FileSelectAll = function(event,tableau)
                    {       
                            /* Actuellement les "data-upabcicss-image-preview" employés dans le code html, servent pour réserver la hauteur et la largeur nécessaires à l'affichage de la prévisualisation, si le fichier est une image. Ces valeurs doivent donc être égales à config.imgPreviewMaxWidth et config.imgPreviewMaxHeight. 
                            Les 4 lignes ci dessous servent à automatiser le html en fonction d'un changement de la configuration javascript. Cela pourrait être pratique si vous voulez modifier facilement les dimensions des vignettes en fonction du périphérique (portable, tablette, bureau) détecté avec un script complémentaire. Il vous suffira de définir config.imgPreviewMaxWidth et config.imgPreviewMaxHeight sans avoir besoin de changer les valeurs des "data-upabcicss-image-preview".
                            Noter que tant que ce code est actif on pourrait supprimer les data "data-upabcicss-image-preview". J'ai voulu montrer les deux façons faire.
                            */
                            // Il y a un tableau d'objets par fichier
                            $.each(tableau, function(i,f)
                            {
                                    // Voir le mode d'emploi (paragraphe : Contenu des objets passés en paramètre dans les fonctions énénementielles) pour connaître les paramètres disponibles dans les fonctions 
                                    // Si une image de prévisualisation est diponible
                                    if(f.img_prev_delayed > -1)
                                    {
                                            // On formate les blocs pour réserver les dimensions maximales de la vignette.
                                            f.obj.imgPreview.parent().css('height',Upload.config.imgPreviewMaxHeight+'px');
                                            f.obj.imgPreview.css('width',Upload.config.imgPreviewMaxWidth+'px');
                                    }
                            })
                            // ---------------------fin du remplacement automatique des valeurs des data-upabcicss-image-preview-------------
                    
                    
                    
                            // Je ferme l'éventuel message sur la sauvegarde (si soumission multiples)
                            Upload.config.perso_content.find(".backupend").css('display','none');
                    
                            // Je ferme la boite au cas où elle serait ouverte (si soumission multiples), puis le l'ouvre avec un slide 
                            Upload.config.perso_content.css('display','none').slideDown(400, function() 
                            {
                                    // Une fois l'ouverture terminée...
                                    // Les éléments sont bien dans le DOM et on peut appliquer un slide de fermeture (slideUp) onclick sur le bouton de fermeture
                                    Upload.config.perso_fermer_formulaire = Upload.config.perso_form.find(".fermer_formulaire");
                                    
                                    Upload.config.perso_fermer_formulaire.one("click", Upload.config.perso_slideUp) 
                            
                                    // Et on fait afficher les vignettes avec la fonction "func_ImgPreviewStartAll" (qui ne fonctionne que si "config.imgPreviewStartAuto = false" sinon l'affichage est automatique dès la sélection des fichiers)
                                    Upload.func_ImgPreviewStartAll();
                            });
                    }
                    
                    
                    // Définition d'une fonction javascript événementielle qui sera exécutée à la soumission du formulaire (option ".config.func_FormSubmit")
                    Upload.config.func_FormSubmit = function()
                    {
                            // Durant l'upload je supprime la possibilité de fermeture pour que le visiteur puisse toujours voir les informations
                            Upload.config.perso_fermer_formulaire.off("click");
                            
                            // Je change le contenu de l'entête (.bouton_custom_file) en mettant "Traitement en cours..."
                            Upload.config.perso_select.text(Upload.config.perso_select_remplacement);
                    }
                    
                    
                    // Définition d'une fonction javascript événementielle qui sera exécutée à la fin du traitement du formulaire (option ".config.func_FormEnd")  
                    Upload.config.func_FormEnd = function(tableau)
                    {
                            // L'upload terminé je remet le comportement de fermeture sur le bouton de fermeture et sur le bouton d'information "Traitement terminé" défini dans le html avec ".fin_traitement"
                            $.each([Upload.config.perso_form.find(".fin_traitement"), Upload.config.perso_fermer_formulaire], function()
                            {
                                    $(this).one("click", Upload.config.perso_slideUp)
                            }) 
                            // Je remet le texte initial 
                            Upload.config.perso_select.text(Upload.config.perso_select_texte);
                            
                            /* Je compte le nombre de fichiers entièrement téléchargés ainsi que l'existence d'une sauvegarde, en utilisant des propriété des objets retournés dans le premier paramètre de la fonction "func_FormEnd".  Cf doc (paragraphe : Contenu des objets passés en paramètre dans les fonctions énénementielles) et faire console.log(tableau) pour comprendre l'exploitation des propriétés.
                            - A noter que si j'avais eu besoin d'utiliser l'option de configuration "config.queryFormEnd" qui fait une requête additionnelle pour informer le serveur de la fin de traitement de tous les fichiers, j'aurais pu faire afficher ces mêmes informations par le serveur comme dans l'exemple n°5 du fichier "UploadAjaxABCI.php".
                            */
                            //console.log(tableau);
                            var cpt = 0;
                            var sav = 0;
                            $.each(tableau, function(i,v)
                            {
                                    if(v.result == 'ok_done'){cpt++};
                                    if(v.qte_save > 0){sav++};
                            })
                            if(cpt > 0)
                            {
                                    // Cible dans laquelle on affiche l'information
                                    var info_server = Upload.config.perso_form.find(".UpAbci_infosServer");
                                    if(cpt == 1)
                                    {
                                            info_server.html(cpt+' '+'fichier téléchargé');
                                    }
                                    else
                                    {
                                            info_server.html(cpt+' '+'fichiers téléchargés');
                                    }
                                    info_server.css({'display':'block'});// Je fais afficher le bloc
                            }
                            if(sav > 0)
                            {
                                    // Slide sur l'information de sauvegarde
                                    Upload.config.perso_content.find(".backupend").slideDown(300);
                            }
                    }
                    
                    
                    // Modification des messages par défaut de la classe
                    Upload.info.status.inProgress = 'en cours';
                    Upload.info.status.stop = 'arrêt';
                    Upload.info.status.ok = ""; // Modification de la réponse textuelle du status si téléchargement ok. En mettant vide seules les informations envoyées par php en retour de requête ajax seront affichées. C'est le rond vert défini avec la classe "symbol_rond" qui témoignera du status ok.
                    
                    
                    // Démarrage de la fonction d'upload
                    Upload.Start()});
                    </script>
    	</body>
    </html>

    La page vers laquelle ça renvoie (UploadAjaxABCI_Php_Load_Redimensions.php) :
    Code php : 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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    <?php
    /*
    require 'UploadAjaxABCIServeur.php' et 'fctredimimage.php';
    
    (Gardez bien à l'esprit que ce script sera appelé plusieurs fois pour le traitement du même post, excepté en cas d'upload simple si la taille du fichier est inférieure à la taille d'un fragment ou si aucun fichier n'est joint)
    
    // Exemple de script php d'upload avec redimensionnement d'images
    
    /* Les deux lignes ci-dessous permettent de provoquer des erreurs serveur (uniquement pour test)
    - memory_limit 40M devrait provoquer des erreurs mémoire pour les redimensionnements de fichier supérieur à environ 4-5 mega pixels
    - max_execution_time 2 devrait provoquer des erreurs max execution time pour les redimensionnements d'images de plus de 3-4 mega pixel mais cette valeur devrait être néanmoins suffisante pour charger ces "petits" fichiers.
    */
    //ini_set("memory_limit","40M");
    //ini_set('max_execution_time','2');
     
    session_start();
     
    // Vous devez vérifier l'existence de ces dossiers ou changer ces adresses
    /*------------------------------------------------------*/
    $dossier_destination1 = "../../".$_SESSION['arbo']."/";
    $dossier_temporaire = "../Upload_Temp/";
    /*------------------------------------------------------*/
     
     
    $dir = $_SESSION['arbo']."/";
    $count = 0;
     
    $here = explode("/", $dir);
    $num = (count($here) - 2);
     
    $bli = explode("/", $dir);
    $blo = (count($bli));
    $poi = "1";
    $dir_thumbs = "../../thumbs";
     
    while($poi < $blo)
    	{
    		$dir_thumbs = $dir_thumbs."/".$bli[$poi];
    		if(!file_exists($dir_thumbs))
    			{
    				mkdir($dir_thumbs, 0777);
    			}
    		$poi++;
    	}
     
    header('Content-type: text/html; charset=UTF-8');
     
    require 'UploadAjaxABCIServeur.php';
     
    $up = new UploadAjaxABCIServeur($dossier_destination1, $dossier_temporaire);
     
    // - "setModeDebug()" affiche les erreurs fatales non catchées par la fonction "cathErrorServeur()". A n'utiliser qu'en phase de développement
    // Décommenter la ligne ci-dessous en phase de développement pour faire afficher les erreurs php dans le formulaire.
    /*
    $up->setModeDebug ();
    */
     
    /* - La fonction "cathErrorServeur($tableau)" demande un tableau en paramètre et permet de personnaliser le retour des erreurs fatales. L'index des valeurs est constitué par une suite de mots génériques renvoyés par l'erreur du serveur, et les valeurs sont constituées soit du message personnalisé à afficher, soit d'un tableau constitué du message personnalisé comme premier élément et de la valeur "true" (ou d'une valeur non nulle et différente de false) comme second élément pour indiquer de supprimer le fichier temporaire et l'éventuel cookie identifiant ce fichier. Voir le mode d'emploi de la classe pour plus d'explications.
    
    	- Les messages d'erreurs seront concaténés au message défini dans la classe javascript avec "info.status.erreur". 
    	
    	- Si aucune des deux fonctions "cathErrorServeur()" ou "setModeDebug()" n'est utilisée, les erreurs fatales ne seront pas transmises et seul le message javascript s'affichera.
    */
     
    // Exemple
    $tab_erreurs = array();
     
    $tab_erreurs['Allowed memory size'] = array("Mémoire insuffisante, le fichier est trop gros pour être redimensionné.",true);
     
    $tab_erreurs['Maximum execution time'] = "Le temps d'exécution maximum du script est dépassé, rechargez votre image et réessayez !";
     
    $up->cathErrorServeur($tab_erreurs);
    // Vous pouvez bien entendu compléter le tableau par autant de lignes que vous voulez.
     
    /*  Pour l'exemple ci-dessus je fais l'hypothèse que si une erreur mémoire se produit lors du redimensionnement, il est inutile de réessayer donc je peux effacer le fichier temporaire et l'éventuel cookie enregistrant les coordonnées de la sauvegarde. Cela permet si besoin d'optimiser le nettoyage du dossier temporaire.
    
    Par contre le dépassement de "Maximum execution time" peut être dû à un serveur momentanément surchargé. On a donc peut-être intérêt de conserver le fichier éventuellement sauvegardé - disponible pour les fichiers excédant "$UpAbci_fragmentSize" défini dans "UploadAjaxABCI_Redimensions.php" - pour une nouvelle tentative. Cela permettra de le réutiliser directement lors du prochain chargement du fichier sans avoir besoin d'attendre pour son téléchargement.
    */
     
     
     
     
     
    $uniqid_form = $up->getParam("uniqid_form");
     
    // Il est conseillé de ne pas supprimer cette ligne car c'est le token qui assure que ce script est appelé depuis le formulaire. Permet également de renvoyer un message en cas de timeout du serveur, connexion perdue ou non valide.
    if(!(isset($uniqid_form,$_SESSION['UploadAjaxABCI'][$uniqid_form]))) $up->exitStatusErreur("Connexion non valide ou perdue. Rafraîchissez la page et recharger votre fichier, si celui-ci dispose d'une sauvegarde automatique elle sera utilisée."); 
     
    // S'assure qu'un fichier ou un fragment de fichier est en téléchargement
    if($up->getFragment())
    {
    	$filesExtensions = array('jpg','jpeg','png');
     
    	$nom_fichier_nettoye = $up->getCleanFileName();// on pourrait utiliser le nom original avec la fonction adéquate mais un nom de fichier nettoyé offre une meilleure compatibilité avec tous les serveurs.
     
    	$verif_extension = $up->VerifExtensions($nom_fichier_nettoye,$filesExtensions);
    	if($verif_extension == false) 
    	{
    		$up->exitStatusErreur('Extension du fichier non valide.');
    	}
     
    	// Pour vérification des doublons sur le serveur, on récupère la destination du fichier avec "getFileDestination()" qui retourne "$adresse_relative.$dossier_destination.$fichier nettoyé"
    	$destination_fichier = $up->getFileDestination();
     
    	// Plutôt que de renommer le fichier en cas de doublon comme je le fais plus loin avec la fonction "RenameIdenticName()", on pourrait sortir du script avant d'employer la fonction "Upload()" et envoyer un message d'erreur en faisant :
    	if(is_file($destination_fichier))
    	{
    		$up->exitStatusErreur('Ce fichier existe déjà.');		
    	}
     
    	// Upload dans le dossier temporaire
    	$up->Upload();
     
    	// Retourne l'adresse du fichier temporaire quand il est complet, sinon false
    	$fichier_complet = $up->getTempAdressFileComplete();
    	if($fichier_complet != false)
    	{
    		require 'fctredimimage.php';
     
    		/*Si plusieurs redimensionnements on utilise les troisième et quatrième paramètre de la fonction "fctredimimage()" qui vont copier le fichier redimensionné dans le répertoire de destination et laisser intact le fichier original.
    		Ci-dessous je crée une fonction qui réalise la redimension et impose le chmod au fichier de destination*/
    		function Redim($L, $H, $dossier_dest=null, $nom_fichier=null, $dirname, $basename, $extension_fichier, $up)
    		{
    			$redim = fctredimimage($L, $H, $dossier_dest, $nom_fichier, $dirname, $basename, $extension_fichier);
     
    			if(!$redim) 
    			{			
    				$up->exitStatusErreur("Erreur dans le redimensionnement du fichier.");
    			}
     
    			// On met le chmod si besoin (mini 0604 pour une lecture depuis une url externe) au cas où le serveur mette un 0600
    			$destination_fichier = $dossier_dest.$nom_fichier;
    			if(trim($destination_fichier) != '' && !@chmod($destination_fichier,0604))
    			{
    				$up->exitStatusErreur("Echec de la configuration des droits d'accès du fichier.");
    			}
    		}
     
    		// Informations sur le fichier
    		$pathinfo = pathinfo($nom_fichier_nettoye);
     
    		$extension_fichier = strtolower($pathinfo['extension']);
     
    		$non_fichier = $pathinfo['filename'];
     
    		// On utilise l'adresse du fichier temporaire (fichier de travail) pour le passer en paramètre à la fonction de redimensionnement
    		$basename = basename($fichier_complet);
    		$dirname = dirname($fichier_complet).'/';
     
    		// On défini l'adresse du dossier de destination par rapport au serveur (recommandé)
    		$dossier_dest_serveur = $up->getRelativeAddress().$dossier_destination1;
     
    		// Nouveau nom du fichier final vignette _mini max L 200 H 200
    		// $nom_fichier_mini = $non_fichier.'_mini.'.$extension_fichier;
    		// Utilisation de la fonction créée plus haut (redimensionnement + définition du chmod)
    		// Redim(200, 200, $dossier_dest_serveur, $nom_fichier_mini, $dirname, $basename, $extension_fichier, $up);
     
     
    		// On peut faire d'autres redimensionnements sur le même principe excepté pour le dernier redimensionnement
    		// Nouveau nom du fichier final vignette _moyen max L 500 H 400
    		// $nom_fichier_moyen = $non_fichier.'_moyen.'.$extension_fichier;
    		// Redim(500, 400, $dossier_dest_serveur, $nom_fichier_moyen, $dirname, $basename, $extension_fichier, $up);
     
     
    		/* Pour le dernier redimensionnemnet on utilise le répertoire temporaire comme dossier de destination (si l'on ne souhaite pas sauvegarder le fichier original), ce qui écrase le fichier original et le remplace par le fichier redimensionné. Pour ce faire il suffit de ne pas renseigner les troisième et quatrième paramètres de la fonction "fctredimimage()". */		
    		// Redim(1000, 800, '', '', $dirname, $basename, $extension_fichier, $up);
     
    		// $nom_fichier_max = $non_fichier.'_max.'.$extension_fichier;
    		// On construit l'adresse du dernier fichier redimensionné pour le passer en paramètre à la fonction "Transfert()"
    		// $destination_fichier = $dossier_dest_serveur.$nom_fichier_max;
     
    		// La fonction Transfert() transfère le fichier temporaire vers son emplacement définitif (retourne true si ok). L'utilisation de cette fonction est indispensable pour terminer l'upload (supprime le cookie et envoie les informations nécessaires au script ajax pour terminer la requête). 
    		// $transfert = $up->Transfert($destination_fichier);
     
    		// On défini le chmod (si besoin)
    		// if($transfert && !@chmod($destination_fichier,0604))
    		// {
    			// $up->exitStatusErreur("Echec de la configuration des droits d'accès du fichier");
    		// }
     
    		//  Variante : dernier redimensionnement idem précédent + sauvegarde de l'image originale
     
    		$nom_fichier_max = 'thumb_'.$non_fichier.'.'.$extension_fichier;
    		Redim(300, 300, $dir_thumbs, $nom_fichier_max, $dirname, $basename, $extension_fichier, $up);
     
    		// Sauvegarde du fichier original
    		$destination_fichier = $dossier_dest_serveur.$non_fichier.'.'.$extension_fichier;
    		$transfert = $up->Transfert($destination_fichier);
    		if($transfert && !@chmod($destination_fichier,0604))
    		{
    			$up->exitStatusErreur("Echec de la configuration des droits d'accès du fichier");
    		}
     
    		////////////////////////
    		//AJOUT FICHIER AU ZIP//
    		////////////////////////
    		$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();
     
    	}
    }
     
     
    // Voir le fichier "UploadAjaxABCI_Php_Load.php" pour des possibilités supplémentaires...
     
     
    $up->exitReponseAjax();
    ?>

    Voila, je pense que tu as tout.

  4. #84
    Expert éminent sénior

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

    Oui en fait le problème de la fonction de redimensionnement avec les ".png" existait précisément quand elle ne devait pas redimensionner les images, c'est pour cela que je ne pouvais rien voir puisque je la testait en faisant des redimensionnements. Effectivement il manquait deux lignes de code que j'ai ajoutées. Ci-dessous le code corrigé :


    Code php : 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
    127
    128
    129
    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); 
    								imageAlphaBlending($Ress_Src, false);
    								imageSaveAlpha($Ress_Src, true);
    								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;
    }


    Concernant les gif, ça fonctionne également. Juste dans ton fichier "UploadAjaxABCI_Php_Load_Redimensions.php" je vois la ligne $filesExtensions = array('jpg','jpeg','png');... faudrait ajouter l'extension "gif" dans le tableau sinon évidemment...

    Toujours concernant les extensions je vois dans ton fichier "UploadAjaxABCI_Custom.php" la ligne :
    //Upload.config.filesExtensions = ['jpg','jpeg','png','mp4','avi','mpg','m2ts','mkv','flv','mp3']; Puisque tu contrôle les extensions des fichiers côté serveur, pourquoi ne pas le faire aussi en javascript, cela permettrait au visiteur d'avoir une information instantanée (avant d'uploader les fichiers). Donc remplaces cette ligne par Upload.config.filesExtensions = ['jpg','jpeg','png','gif']; d'ailleurs je te l'ai déjà dit dans ce message.


    Pour ton zip s'il fonctionne laisses-le comme ça. Tu ne gagneras pas beaucoup de temps en faisant le zip à la fin du formulaire plutôt qu'au fur et à mesure de l'enregistrement des fichiers. J'ai testé les deux méthodes sur 11 fichiers pour un total de 86Mo, avec un redimensionnement + sauvegarde de l'image originale + zip :

    - Zip créé au fur et à mesure que les fichiers sont complets : 30s
    - Zip crée à la fin du traitement de tous les fichiers : 28s

    La différence est assez négligeable et surtout tu risques une incohérence : en effet si le visiteur arrête la soumission des fichiers durant l'upload ou s'il y a une panne internet tu n'auras aucun zip alors que pourtant certaines images ont peut-être été enregistrées. Si tu fais ton zip au fur et à mesure au moins il restera cohérent avec les images enregistrées. Donc laisse tomber la seconde méthode, c'est ce qu'on appelle une vraie fausse bonne idée. C'est surtout les redimensionnements qui prennent du temps et très peu le zip.

    Concernant le fait de savoir si un fichier existe déjà avant de commencer l'upload, comme déjà dit il faut faire une requête ajax sur le onchange du bouton de sélection des fichiers. Il y a les fonctions événementielles "config.func_FileSelectEach" et "config.func_FileSelectAll" pour avoir une info lors de la sélection des fichiers. Je donnerai un exemple quand j'aurai le temps (peut-être pas cette semaine).
    En attendant pour résoudre en partie ce problème, dans le fichier "UploadAjaxABCI_Custom.php" tu peux baisser la taille du fragment à la ligne : $UpAbci_fragmentSize = Return_Octets('8M');.
    Tu peux mettre '4M' ou '2M' cela fera des fragments de 4 ou 2Mo donc plus petits. Au total cela fera plus de requêtes pour télécharger un fichier (surtout pour les gros fichiers) mais pour des images ça ne devrait pas être trop pénalisant. L'avantage est que tu auras des sauvegardes plus fréquentes mais aussi que le visiteur aura son retour d'information en provenance du serveur, 2 fois ou 4 fois plus vite par rapport à des fragments de 8Mo.

  5. #85
    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
    Citation Envoyé par ABCIWEB
    Concernant les gif, ça fonctionne également. Juste dans ton fichier "UploadAjaxABCI_Php_Load_Redimensions.php" je vois la ligne $filesExtensions = array('jpg','jpeg','png');... faudrait ajouter l'extension "gif" dans le tableau sinon évidemment...
    Citation Envoyé par ABCIWEB
    Donc remplaces cette ligne par Upload.config.filesExtensions = ['jpg','jpeg','png','gif']; d'ailleurs je te l'ai déjà dit dans ce message.
    Je l'avais bien fait, mais j'ai eu un soucis et j'ai ré-initialisé les fichiers. J'avais oublié de rechanger ça.

    Pour l'histoire du zip, il m'arrive d'uploader plusieurs centaines de photos à la fois, et la différence se fait bien plus sentir (t'as déjà 2 secondes sur seulement 11 fichiers) : plusieurs secondes à la fin de chaque fichier pour le mettre dans le zip.
    Mais effectivement, il est bien plus sécurisé de laisser comme ça. Merci du conseil.

    D'ailleurs merci en général pour ta patience et le temps que tu m'as consacré ! Tout marche nikel maintenant. Le reste n'est que gain de temps.

  6. #86
    Expert éminent sénior

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

    Nouvelle version 4.3d

    Par rapport à la version 4.3 c, seules les fonctions php "fctCropRedim()" et "fctredimimage()" ont été mises à jour pour résoudre le bug sur les fichiers ".png" qui survenait quand ces images ne devaient pas être redimensionnées mais simplement optimisées pour le web. Par la même occasion j'ai ajouté la possibilité de traiter les fichiers ".gif".

    Je n'ai pas (encore) documenté les changements de la 4.3 par rapport à la version 4.0c. Des fonctionnalités javascript et php ont été ajoutées. Je ferai le détail un peu plus tard car une nouvelle version 4.5 est en cours de préparation (peu ou pas de modifications sont prévues côté javascript par rapport à la dernière version 4.3d, mais plus de fonctionnalités et d'exemples côté serveur).

  7. #87
    Expert éminent sénior

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

    Nouvelle version 4.5

    - Corrige le fichier d'exemple serveur "UploadAjaxABCI_Php_Load_Controle_input_text.php" : manquait le retour d'information si on entrait un titre sans fichier joint dans le mode test sans bdd.

    - Un nouvel exemple "UploadAjaxABCI_Custom_VerifFileExist.php" permet de vérifier les fichiers déjà existants sur le serveur avant la soumission du formulaire. Le visiteur y gagne en confort avec une information immédiate et le serveur en bande passante.

    Techniquement cet exemple est intéressant car il montre comment contrôler les paramètres internes de la classe javascript, "onChange" sur le champ de type file, pour interdire l'envoi d'un fichier suite à un contrôle extérieur à la classe, ici la requête ajax de contrôle des fichiers déjà existants.

    Il arrive en complément du dernier exemple ajouté "UploadAjaxABCI_Controle_input_text.php" qui montre comment contrôler des champs du formulaire externes à l'upload "onSubmit" tout en gardant les fonctionnalités de la classe d'upload.

    Ces deux exemples sont intéressants pour comprendre facilement comment utiliser cette classe d'upload dans des contextes et pour besoins très différents.

    Tous les fichiers ont été mis à jour y compris le mode d'emploi pour les nouvelles fonctionnalités javascript ajoutées

    Des fonctions annexes ont également été ajoutées dans la classe serveur php qui sont documentées dans le fichier "UploadAjaxABCIServeur.php".

  8. #88
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Intégration du formulaire
    Bonjour,

    J'ai l'impression qu'il faut être un expert pour l'utiliser car j'ai essayé tout simplement en faisant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include('UploadAjaxABCI_Redimensions.php');?>
    sur ma page mais cela ne fonctionne pas alors qu'en dehors de ma page, ça fonctionne.
    En fait je n'ai pas modifié l'arborescence des fichiers mais modifié le formulaire pour n'inclure que le formulaire sans la balise form et j"ai renommé le mien avec le nom du formulaire mais rien n'y fait car même la miniature ne se charge pas.
    Quand j"essai d'afficher par exemple le nom du dossier de destination par exemple:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $dossier_destination1; ?>
    cela ne fonctionne pas.
    Merci quand même.

  9. #89
    Expert éminent sénior

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

    "UploadAjaxABCI_Redimensions.php" est un fichier d'exemple avec du code php, html et javascript. Tu ne peux pas faire un include en php en espérant que tout va fonctionner notamment les liens javascript.

    Faits une copie de ce fichier "UploadAjaxABCI_Redimensions.php" que tu nommeras avec le nom que tu veux (celui de ta page). Tu placeras cette copie où tu veux mais il faudra modifier les liens javascript et l'adresse du fichier de destination ajax en conséquence.

    1/ Par exemple si tu veux placer ton fichier en dehors du répertoire "Upload-Ajax-ABCI" et le placer au même niveau que ce répertoire (par rapport au répertoire parent), tu devras remplacer les 3 lignes ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script src="Javascript/jquery.js"></script>
     
    <script src="Javascript/UploadAjaxABCI.js"></script>
     
    var destination_ajax = 'Php_Upload/UploadAjaxABCI_Php_Load_Redimensions_optimise.php';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script src="Upload-Ajax-ABCI/Javascript/jquery.js"></script>
     
    <script src="Upload-Ajax-ABCI/Javascript/UploadAjaxABCI.js"></script>
     
    var destination_ajax = 'Upload-Ajax-ABCI/Php_Upload/UploadAjaxABCI_Php_Load_Redimensions_optimise.php';

    2/ Maintenant si tu veux déplacer le répertoire de destination de tes fichiers uploadés (nommé "Destination_Upload1" dans mes exemples) également au même niveau que "Upload-Ajax-ABCI" (et non plus à l'intérieur), tu dois aller dans le fichier de destination de la requête ajax ("UploadAjaxABCI_Php_Load_Redimensions_optimise.php" dans ton cas) et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dossier_destination1 = '../Destination_Upload1/';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dossier_destination1 = '../../Destination_Upload1/';
    Le '../' permet de remonter d'un niveau dans l'arborescence des fichiers. A noter que si tu déplace physiquement le répertoire "Destination_Upload1", les autres fichiers d'exemples qui utilisent ce dossier ne pourront plus fonctionner à moins de faire les mêmes modifications pour définir le dossier de destination des fichiers uploadés.


    3/ Quand tout est au bon endroit comme tu veux et fonctionnel, insère tes données à l'intérieur du formulaire d'upload existant sans supprimer les données déjà existantes. Quand on est débutant c'est souvent plus facile de compléter un code fonctionnel avec son propre code, que d'inclure un code fonctionnel dans son propre code.


    Note : Ces notions ne sont pas du niveau expert, c'est le minimum que l'on doit savoir pour incorporer des fichiers en modifiant l'emplacement original

  10. #90
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : janvier 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Exécuter du code php
    Bonjour,

    Comment je peux faire pour exécuter du code php après le chargement de la photo. J'essai de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var traitement_frm = 'minichat_post.php';
     
    var up = new UploadAjaxABCI('#form_redim',destination_ajax,'#reponse_upload',traitement_frm);
    mais il ne l'exécute pas...

  11. #91
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Upload de fichiers
    Oui c'est un fait comme ça ça marche beaucoup mieux merci beaucoup

  12. #92
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2010
    Messages
    5 261
    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 261
    Points : 10 115
    Points
    10 115
    Par défaut
    @tba61
    Salut,

    Si tu regarde le mode d'emploi, la classe javascript n'accepte que 3 paramètres donc le quatrième ne sera pas pris en compte. Ce module d'upload est pratique car il fait gagner beaucoup de temps, pour autant il n'est pas magique, suffit pas de rajouter un nouvel argument en croyant que la classe va en faire automatiquement ce que tu veux. Comment le saurait-elle ?

    Si tu souhaite faire une redirection automatique vers une autre page une fois l'upload terminé, tu peux utiliser la fonction javascript événementielle "config.func_FormEnd" qui se déclenchera une fois l'upload terminé. Je te donne un exemple complet à partir de l'exemple "UploadAjaxABCI_Basique.php" pour mieux mettre en évidence le code que j'ai ajouté.

    Code html : 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
    127
    128
    129
    <?php
    /*
    Utilise le fichier "Php_Upload/UploadAjaxABCI_Php_Load_Basique.php" comme destination Ajax
    */
    session_start();
    header('Content-type: text/html; charset=UTF-8');
     
     
    function Return_Octets($val)
    {
            $val = str_replace(array(',',' '),array('.',''),$val);
            $val = rtrim($val, "oO");
     
            $last = strtolower(substr($val,-1));
     
            switch($last)
            {
                    case 't':  $val *= 1024;
                    case 'g':  $val *= 1024;
                    case 'm': $val *= 1024;
                    case 'k':  $val *= 1024;
            }
            return $val;
    }
     
    $UpAbci_fragmentSize = Return_Octets('8M');
     
    // Vérifie si $UpAbci_fragmentSize n'est pas supérieur aux limites du serveur
    $upload_max_filesize = Return_Octets(min(ini_get('upload_max_filesize'),ini_get('post_max_size')));
    $UpAbci_fragmentSize = !empty($UpAbci_fragmentSize) && $upload_max_filesize > $UpAbci_fragmentSize ? $UpAbci_fragmentSize : $upload_max_filesize;
     
     
    $UpAbci_uniqidForm = hash("sha256",uniqid(rand(), true));
     
    // Jeton de formulaire (token);
    $_SESSION['UploadAjaxABCI'][$UpAbci_uniqidForm]['token'] = 1;
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8" />
    <title>UploadAjaxABCI : upload de fichiers par fragmentation avec Html5 et Ajax/Jquery/Php</title>
    <style type="text/css">
    progress { 
            width:100px;
    }
    </style>
    </head>
    <body style="font-family:Arial, Helvetica, sans-serif; font-size:0.8em;width:800px;margin:3em auto 0 auto;line-height:1.5em">
     
    <div>
    <form id="form_base" action="#" method="post">
     <fieldset style="border:2px solid #000;border-radius:5px;padding:1em">
        <legend>Upload avec configuration de base : nom, progression graphique, status et arrêt</legend>
         <input type="file" name="upload_simple" multiple="multiple"  />
         <input type="hidden" value="<?=$UpAbci_fragmentSize?>" name="UpAbci_fragmentSize" />
         <input type="hidden" value="<?=$UpAbci_uniqidForm?>" name="UpAbci_uniqidForm" />
         <input type="submit" value="Envoyer" />
     
         <!-- Bloc conteneur du retour d'informations -->
         <div id="reponse_upload">
            <!--information du fichier que l'on affiche uniquement si un fichier est soumis avec le style événementiel "data-upabcicss-select-file", pour éviter la barre de progression graphique vide si soumission du formulaire sans fichier-->
             <div class="UpAbci_infosFile" style="display:none;margin-top:1em;" data-upabcicss-select-file="display:block;">
                - <span class="UpAbci_name"></span><!-- nom du fichier -->
                <progress class="UpAbci_progressionG"></progress> <!-- progression graphique -->
                <span class="UpAbci_status" data-upabcicss-result-ok="color:green;font-weight:bold">en attente</span><!-- status (important sinon pas de retour d'information) -->
                <span class="UpAbci_stop" style="color:red;cursor:pointer;font-size:0.8em;float:right" data-upabcicss-result="display:none">stop</span>
             </div>
        </div>
     </fieldset>
    </form>
    </div>
     
    <div id="reponse_fin"></div>
     
    <script src="Javascript/jquery.js"></script>
    <script src="Javascript/UploadAjaxABCI.js"></script>
     
    <script>
    // Initialisation de la classe javascript (identifiant formulaire, destination ajax, identifiant réponse)
    var up = new UploadAjaxABCI('#form_base','Php_Upload/UploadAjaxABCI_Php_Load_Basique.php','#reponse_upload');
     
    // Cette fonction sera exécutée à la fin du traitement du formulaire. Voir le mode d'emploi pour plus d'informations 
    up.config.func_FormEnd = function(tableau)
    {
            /*
            J'utilise la logique suivante : Si le nombre de fichiers (donc de tableaux) est égal au nombre de fichier terminés ok ou non soumis (car stoppés avant la soumission du formulaire en cas d'erreur d'extension ou d'arrêt volontaire) ou stoppé volontairement durant le transfert, alors aucun incident n'est intervenu et je fais la redirection après 4 secondes pour laisser au visiteur le temps de voir le résultat. Si un problème, autre qu'un arrêt volontaire, survient durant l'upload, les informations sur les fichiers resteront affichées et aucune redirection n'est faite.
                    
            Compte le nombre de fichiers terminés ok ou non soumis ou arrêtes volontairement durant l'upload
            Les fichiers non soumis sont les fichiers arrêtes volontairement avant l'envoi et les fichiers présentant des erreurs utilisateur (taille ou extensison) traitées en javascript avant l'envoi du formulaire.
            
            Cf mode d'emploi pour connaître le contenu du tableau 
            - "ok_done" est un fichier ok 
            - "0_0" est un fichier non soumis
            - stop == 1 est un fichier arrêté volontairement
            */      
            var adresse_destination = 'minichat_post.php';  
            
            var cpt = 0;
            $.each(tableau,function(i,v)
            {       
                    if(v.result == "ok_done" || v.result == "0_0" || v.stop == 1)
                    {
                            cpt++;
                    }
            })
            
            // Si aucun fichier joint et soumis au formulaire n'a eu d'erreur on envoie un message dans #reponse_fin et on fait une redirection automatique après 4 secondes
            if(tableau.length == cpt)
            {
                    // envoi du message
                    $('#reponse_fin').html('Traitement du formulaire terminé. Vous allez être redirigé vers minichat. Si la redirection ne fonctionne pas vous pouvez <a href="'+adresse_destination+'">cliquer ici</a>');
                    
                    // redirection après 4 secondes
                    setTimeout(function(){document.location = adresse_destination;},4000);
            }
            else
            {
                    // envoi du message et pas de redirection automatique en cas de problème
                    $('#reponse_fin').html('Un problème est survenu durant l\'upolad. Vous pouvez réessayer ou vous rendre directement dans minichat en cliquant <a href="'+adresse_destination+'">sur ce lien</a>');
            }
    }
     
    // Démarrage de la fonction, DOM chargé
    $(function(){up.Start()});
    </script>
     
    </body>
    </html>
    Comme tu peux le lire dans les commentaires je fais une redirection au bout de quatre secondes pour que le visiteur ait le temps de voir le résultat de l'upload.

    Attention de bien définir l'adresse de redirection "adresse_destination" dans le code. Ici je l'ai définie à 'minichat_post.php' ce qui veux dire que je suppose que cette page de destination se situe au même niveau que le fichier contenant ce formulaire par rapport au répertoire parent. Je viens de faire un topo sur les redirections dans mon message précédent.

  13. #93
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : janvier 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Upload de fichiers
    En fait ce que je souhaitais c'était d'abord gérer mes données et ensuite gérer l'upload de fichiers pour éviter qu'il y ait des images de transférées pour rien si les données ne sont pas bonnes.

  14. #94
    Expert éminent sénior

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

    Ok, le plus simple est de faire deux formulaires distincts imbriqués dans un ensemble html pour sembler n'en faire qu'un. Seul le formulaire d'envoi des données possédera un bouton submit.

    Donc onsubmit sur le formulaire des données tu fais une requête ajax et à réception du résultat si tout est ok alors tu déclenches la soumission du formulaire d'upload.

    Cela ne pose pas de problème particulier si tu maîtrise un peu javascript/ajax.

    Sinon je suis entrain de faire une version 5 du module d'upload qui inclus cet exemple précisément car je me doutais bien que cette question serait posée un jour. Mais comme je fais également une optimisation du code php côté serveur - concerne surtout l'organisation du code et quelques fonctionnalités supplémentaires - il me faut un peu de temps et cette nouvelle version ne sera disponible que courant de semaine prochaine ou la suivante en fonction de mes disponibilités.

  15. #95
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : octobre 2015
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Upload avec rename des fichiers !!!
    Bonsoir ABCIWEB,

    Déjà félicitation pour ce formidable script qui me servira car c'est ce que je cherchai pour mettre mon site un peu a jour avec des fonctions que j'ai trouvé dans ce script... j'essai de mettre un peu de mon code php avec votre script et comme je ne connais pas trop le javascript je suis un peu perdu.je me sert de "UploadAjaxABCI_Php_Load.php" avec "UploadAjaxABCIServeur.php" et j'ai pris le code de Upload 5 car c'est celui qui est le mieux pour ce que je veux faire. J'ai ajouté 3 champs texte, comme c'est pour de la musique j'ai un champs Artiste, Titre et Version. j'ai fait 3 upload file (1 jacquette, 1 extrait mp3 et 1 mp3complet). Je voudrais faire comme mon code que j'ai créé en PHP, renommer les fichiers uploadé avec L' Artiste_titre_version que j'aurai saisie + l'extension qui va avec (jacquette => JPG , extrait mp3 => MP3 et mp3complet=> ZIP). Comme a chaque fois que j'essai d ajouter du code ca ne fonctionne plus du coup je suis au point de départ. Voici la page que j'ai pour le moment Nom : Capture.PNG
Affichages : 456
Taille : 21,0 Ko... j'aurai besoin d'un petit peu d'aide si vous avez du temps. merci d'avance

  16. #96
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2010
    Messages
    5 261
    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 261
    Points : 10 115
    Points
    10 115
    Par défaut
    @deejayf

    Dans le fichier "UploadAjaxABCI.php" (celui qui regroupe plusieurs exemples), plutôt que d'utiliser l'exemple numéro 5, regarde l'exemple numéro 1 qui possède déjà plusieurs champs de type file et donne un exemple de filtrage des extensions des fichiers suivant le nom des différents champs de type file contenus dans le formulaire.

    Ensuite il te suffira de placer "<span class="UpAbci_imgPreview"></span>" à l'intérieur du bloc d'information des fichiers qui possède la classe "UpAbci_infosFile" pour afficher la vignette photo dès la sélection du fichier. Tu peux le mettre sans soucis, si le fichier n'est pas une image, pas grave rien ne s'affichera.

    Tu pourras modifier ensuite la présentation pour avoir la même chose que le formulaire 5 si tu préfère.

    Tu pourras ajouter tes champs input personnels en dehors du bloc ayant la classe "UpAbci_infosFile" (sinon ils seraient répétés pour chaque fichier et c'est plus compliqué, cf les exemples de crop dans ce cas de figure). Tu pourras récupérer leur valeur côté serveur en faisant simplement $mon_champ = urldecode($_POST['mon_champ');

    Et également côté serveur, dans le fichier "UploadAjaxABCI_Php_Load.php" tu vois que tu peux récupérer le nom de l'input de type file avec $nom_input = $up->getParam("input_name");. Donc en fonction de ce nom tu pourras faire le traitement que tu veux pour traiter ton image, ton mp3 ou ton zip.

  17. #97
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : octobre 2015
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Je te remercie ABCIweb pour les instructions. J'ai réussi a faire en sorte que mes fichiers uploader change de nom une fois envoyé sur mon serveur.
    J'aurai encore une petite demande et après ce sera parfait. je sais le faire en php mais pas en javascript (comme je connais pas trop). Je voudrais qu'à la fin du traitement apres genre 4 sec ca fasse un refresh pour effacer les données que j'ai rentrer. Apres je ne t'embete plus promis . Merci d'avance

  18. #98
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2010
    Messages
    5 261
    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 261
    Points : 10 115
    Points
    10 115
    Par défaut
    @deejayf

    Dans le code de cette réponse tu peux regarder l'utilisation de la fonction "up.config.func_FormEnd" qui s'applique à la fin du formulaire.
    Dans ton cas pour rafraichir la page tu peux remplacer la ligne setTimeout(function(){document.location = adresse_destination;},4000); par setTimeout(function(){location.reload();},4000);, et supprimer les lignes relatives à $('#reponse_fin') si tu ne t'en sert pas.

    Autre possibilité, le fichier "UploadAjaxABCI_Controle_input_text.php" donne un exemple pour réinitialiser le formulaire sans rafraichir la page.

  19. #99
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : octobre 2015
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Merci pour tout ABCIweb, j'ai reussi a faire ce que je voulais et je commence a comprendre un peu le javascript, mais vraiment un peu. il va falloir que je me documente pour apprendre le javascript... en tout cas un grand merci je vais pouvoir avancer dans la modernisation de mon site.

  20. #100
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : octobre 2015
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Encore un petit souci !!!
    Bonsoir... Ben en fait si je vais encore t’embêter car après avoir fini de mettre en place tout le code, j'ai fait un test complet et j'ai un souci au final a l'affichage de mes données... donc j'explique le fonctionnement j'ai donc 3 champs texte et 3 champs files les champs texte sont toujours "Artiste, titre & version" et les champs files je les ai nommé "Jacquette, extraitson, mp3complet"... je fait un test donc je marque Artiste = aaa titre = aaa version= aaa, je selectionne un jpg, un mp3 et un zip. Il charge le toute en renommant les fichiers files en aaa_aaa_aaa.jpg/mp3/zip. il vont bien se charger dans les dossiers que j'ai attribué a chaque file. Mon probleme c'est que j'ai une page ou je fait apparaitre les données par rapport a My Sql, les liens sont bon. voici ce que ca donne :
    Nom : Capture.PNG
Affichages : 399
Taille : 14,9 Ko

    La pochette et l'extraitson ne fonctionne pas alors que les fichiers sont bien la et les lien sont bon. le fichier zip fonctionne lui.

    J'ai remarquer une chose en faisant des tests c'est que si je telecharge par exemple la pochette de mon serveur a mon pc, la pochette est bonne elle n'est pas corrompu et du coup si je supprime la pochette du serveur et que je réupload manuellement la meme pochette sans rien modifier et que je refresh ma page la pochette fonctionne. Pareil pour le MP3.

    Une autre chose que j'ai remarquer c'est que les 2 files qui ne fonctionne pas sont des dossiers qui se trouve dans mon dossier Admin qui a un acces bien sur proteger par Nom utilisateur et mot de passe... Le 3eme dossier pour les zip est en dehors d'Admin...

    Avec mon code précédant ça fonctionnais donc je me demande si il n'y a pas un modif a faire dans le code coté javascript, si tu as une idée je suis preneur.

    désolé de t embeter encore, normalement c'est la derniere chose que je te demande

    Je te remercie pour ta patience

    Cordialement
    Francois

+ Répondre à la discussion
Cette discussion est résolue.
Page 5 sur 13 PremièrePremière 123456789 ... 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