Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'upload/progress bar AJAX

    15 février 2019 à 9:55:19

    Bonjour, j'ai un problème d'upload de fichier lorsque ceux ci sont un peu plus lourd que 1Mo or ma limite est à 15Mo :/ et mon traitement AJAX me dit que le fichier est bien upload x).

    J'ai le code AJAX qui traite mon upload en % et mon traitement php qui traite l'envoie dans un dossier :) . Je vous mets les deux codes : 

    <script> // mon script de progress bar
                                function _(elmt)
                                {
                                    return document.getElementById(elmt);
                                }
                                function uploadFile()
                                {
                                    var file = _('fileimage').files[0];
                                    var formdata = new FormData();
                                    formdata.append('fileimage',file);
                                    var ajax = new XMLHttpRequest();
                                    ajax.upload.addEventListener("progress",progressHandler, false);
                                    ajax.addEventListener("load",completeHandler,false);
                                    ajax.addEventListener("error",errorHandler, false);
                                    ajax.addEventListener("abort",abortHandler, false);
                                    ajax.open("POST", "upload.php");
                                    ajax.send(formdata);
                                }
                                function progressHandler(event)
                                {
                                    _("status_bytes").innerHTML = event.loaded+" bytes uploadés sur sur"+event.total + "bytes";
                                    var percent = (event.loaded / event.total) * 100;
                                    _("progressBar").value = Math.round(percent);
                                    _("status").innerHTML = Math.round(percent)+"% uploadé ... Veuillez patienter";
                                }
                                function completeHandler(event)
                                {
                                    _("status").innerHTML = event.target.responseText;
                                    _("progressBar").value = 0;
                                }
                                function errorHandler(event)
                                {
                                    _("status").innerHTML = "Erreur du chargement";
                                }
                                function abortHandler(event)
                                {
                                    _("status").innerHTML = "Chargement annulé"
                                }
                                </script>
                            </head>
                             <body class="bodyadmin">
                                <div class="blocpageadmin">
                                    <section class="sectionadmin">
                                        <article id="newactuality">
                                            <p class="contBDD">Formulaire pour publier un nouvel article dans la page ACCUEIL </p>
                                            <form method="post" action="areaadmin.php" enctype="multipart/form-data">
                                                <label for="title" class="articletitlelabel">Titre *  </label><input type="text" name="title" class="articletitle" size="30" maxlength="50" required placeholder="Votre titre"><br/><br/>
                                                <textarea name="message" id="message" rows="8" cols="60" placeholder="Votre article (actualités)" class="articlebbd" required="Veuillez compléter ce champ." maxlength="1500"></textarea><br/>
                                                <label for="fileimage" class="label-file">Choisir une image</label><input type="file" name="fileimage" id="fileimage" class="filebdd"><br/>
                                                <input type="button" name="loadbar" value="Uploader le fichier" onclick="uploadFile()">
                                                <progress value="0" max="100" id="progressBar"></progress>
                                                <h3 id="status"></h3>
                                                <p id="status_bytes"></p>
                                                <input type="submit" name="Envoyer" value="Publier" class="sendnews" title="Cliquez-ici pour publier !" />
                                            </form>
                                        </article>
                                    </section>
                                </div>
                            </body>
    
    
    ma page upload.php 
    
    <?php
    if (!empty($_Files)) {
    	$nomFichier = $_Files['fileimage']['name'];
    	$tempRep = $_Files['fileimage']['tmp_name'];
    	$tailleFichier = $_Files['fileimage']['size'];
    	$typeFichier = $_Files['fileimage']['type'];
    	$error = $_Files['fileimage']['error'];
    	if ($error!=0 || !$tempRep) {
    		echo 'Erreur: Le fichier n\'a pas pu être uploadé';
    		die();
    	}
    	if(move_uploaded_file($tempRep, 'upload/'.$nomFichier))
    	{
    		echo 'Chargement du fichier '.$nomFichier.' terminé !';
    	}
    	else
    	{
    		echo 'Une erreur est survenue lors de l\'envoi du fichier';
    	}
    }
    ?>
    
    
    Et le traitement du formulaire :
    
    else //(isset($_FILES['image']) AND $_FILES['fileimage']['error']==0)  // il y a une image !
                {
                    //fichier envoyé
                    // Varibale d'erreur par soucis de lisibilité
                    // Evite d'imbriquer trop de if/else, on pourrait aisément s'en passer
                    $error = false;
    
                    // On définis nos constantes
                    $newName = hash('sha512', session_id().microtime());
                    $path = "imagearticle";
                    $legalExtensions = array("jpg", "png", "gif");
                    $legalSize = "15000000"; // 15000000 Octets = 15 MO
    
                    //Vérification image non script
                    /*
                    $handle = fopen($nom, 'r');   
    
                    if ($handle) 
                    {
    
                        while (!feof($handle) AND $erreur == 0) 
                        {
    
                            $buffer = fgets($handle);
    
                            switch (true) 
                            {
                                case strstr($buffer,'<'):
                                $error = true;
                                break;
    
                                case strstr($buffer,'>'):
                                $erreur += 1;
                                $error = true;
                                 break;
    
                                case strstr($buffer,';'):
                                $erreur += 1;
                                $error = true;
                                break;
    
                                case strstr($buffer,'&'):
                                $erreur += 1;
                                $error = true;
                                 break;
    
                                case strstr($buffer,'?'):
                                $erreur += 1;
                                $error = true;
                                break;
                            }
                        }
    
                    fclose($handle);
                    }*/
    
                    // On récupères les infos
                    $file = $_FILES['fileimage'];
                    $actualName = $file['tmp_name'];
                    $actualSize = $file['size'];
                    $infosfichier = pathinfo($_FILES['fileimage']['name']);
                    $extension = $infosfichier['extension'];
    
                    // On s'assure que le fichier n'est pas vide
                    if ($actualName == '' || $actualSize == 0) 
                    {
                        $error = true;
                    }
    
                    // On vérifie qu'un fichier portant le même nom n'est pas présent sur le serveur
                    if (file_exists($path.'/'.$newName.'.'.$extension)) 
                    {
                        $error = true;
                    }
    
                    // On effectue nos vérifications réglementaires
                    if ($error==false) 
                    {
                        if ($actualSize < $legalSize) 
                        {
                            if (in_array($extension, $legalExtensions)) 
                            {
                                move_uploaded_file($actualName, $path.'/'.$newName.'.'.$extension);
                                //Classique traitement nouvel article
                                $tit=htmlspecialchars($_POST['title']);
                                $msg=htmlspecialchars($_POST['message']);
                                $tit_secure=str_replace(array("\n","\r",PHP_EOL),'',$tit);
                                $msg_secure=str_replace(array("\n","\r",PHP_EOL),'',$msg); // article sécurisé à importer dans la BDD
                                $liste_jour = ['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche'];
                                $w=date('w');
                                $jourlettre = $liste_jour[$w-1];
                                $jour = date('d');
                                $mois = date('m');
                                $annee = date('Y');
                                $liste_moi = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre' );
                                try
                                {
                                    $bdd = new PDO('mysql:host=localhost;dbname=crabitanbellevue;charset=utf8', 'root', '');
                                }
                                catch(Exception $e)
                                {
                                        die('Erreur : '.$e->getMessage());
                                }
                                // sécurisation d'éventuels bugs 
                                // On ajoute un article dans mes articles
                                /*$reqid= $bdd->prepare('SELECT MAX(id) AS ID FROM mes_articles');
                                $reqid->execute();
                                $donnes=$reqid->fetch();
                                $newid=$donnes['ID'];
                                $newid+=1;// Artcile de référence dans la BDD */ // Si id n'était pas incrémenté automatiquement
                                $req= $bdd->prepare('INSERT INTO mes_articles(Titre, Article, JourSem, Jour, Mois , Annee, NameFile) VALUES(:Titre, :Article, :JourSem, :Jour, :Mois, :Annee, :NameFile)');
                                $req->execute(array(
                                    'Titre' => $tit_secure,
                                    'Article' => $msg_secure,
                                    'JourSem' => $jourlettre,
                                    'Jour' => $jour,
                                    'Mois' => $liste_moi[$mois-1],
                                    'Annee' => $annee,
                                    'NameFile' => $newName.'.'.$extension
                                ));
                                // id s'autoincrémente et sécurisation de la requête
    
                                ?>
                                <!DOCTYPE html>
                                <html xmlns="http://www.w3.org/1999/xhtml" lang="fr-Fr">
                                <head>
                                    <meta charset="utf-8" />
    
                                    <link rel="stylesheet" href="homeadmin.css" />
    
                                    <title></title>
                                    </head>
                                            
                                    <body class="bodyadmin">
                                        <div class="blocpageadmin">
                                            <section class="sectionadmin">
                                                <article id="newactuality">
                                                    <p class="contBDD2">Félicitations votre nouvel artcile vient d'être publié sur votre ACCUEIL.<br/><br/>Vous allez être redirigé vers l'ACCUEIL automatiquement dans quelques secondes.</p>
                                                </article>
                                            </section>
                                        </div>
                                    </body>
                                </html>
                                <?php
                                $delai=6; // le nombre de secondes
                                $url='../../home.php'; // ton url
                                header("Refresh: $delai;url=$url");
                                
                            }
                        }
                    }
    
                    else 
                    {
                        
                        // On supprime le fichier du serveur
                        @unlink($path.'/'.$newName.'.'.$extension);
                        
                        // Page d'erreur intrusion
                        ?>
                        <!DOCTYPE html>
                        <html xmlns="http://www.w3.org/1999/xhtml" lang="fr-Fr">
                        <head>
                            <meta charset="utf-8" />
                            <link rel="stylesheet" href="homeadmin.css" />
    
                            <title></title>
                        </head>
    
                            <body class="bodyerror">
                                <div class="blocpageadmin">
                                    <section class="sectionerror">
                                        <article class="articlearror">
                                            <p class="texterror">Vous n'êtes pas autorisé à publier un article avec un tel code ! Ou bien le fichier dépasse le poids de 15Mo auquel cas vous devez compresser votre fichier  !<br/><br/>Vous allez être redirigé vers Google</p><!-- redirigé vers home -->
                                        </article>
                                    </section>
                                </div>
                            </body>
                        </html>
                        <?php
                        $delai=5; // le nombre de secondes
                        $url='https://www.google.fr/'; // ton url
                        header("Refresh: $delai;url=$url");  // Page d'erreur intrusion
                    }
                }

    -
    Edité par ApoSkunz 15 février 2019 à 10:19:31

    • Partager sur Facebook
    • Partager sur Twitter

    Le dev web est outil de création illimité.

    Problème d'upload/progress bar AJAX

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown