Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Help] Upload fichiers multiples

Sujet résolu
    16 décembre 2012 à 14:49:31

    Bonjour,

    Pour les besoins de mon entreprise, j'ai téléchargé un plug-in jQuery qui permet l'envoi de fichiers multiples en Drag & Drop.
    Voici le lien vers le site officiel :
    http://blueimp.github.com/jQuery-File-Upload/

    Mon problème, c'est que je ne parviens pas à modifier le répertoire de destination des fichiers. C'est pourtant quelque chose de simple et qui est paramétrable.

    Le principe c'est que les clients pourront se connecter à leur espace perso sur notre CRM et uploader des fichiers qui pourront nous servir pour répondre à leur besoin. Ces fichiers seront stockés sur le serveur dans un répertoire "Entreprise/IdClient/Documents/" (avec l'id en variable de session).

    J'ai regardé à plusieurs reprises la documentation officielle que je ne trouve pas claire et assez pauvre pour quelqu'un qui ne s'y connait pas trop dans ce domaine ... J'ai aussi cherché sur google et ai trouvé des débuts de réponses.

    En analysant le code du plug-in, j'ai vu que le répertoire est définit dans le fichier UploadHandler.php ("server/php/UploadHandler.php").

    <?php
    class UploadHandler
    {
        function __construct($options = null, $initialize = true) {
            $this->options = array(
                'script_url' => $this->get_full_url().'/',
                'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',
                'upload_url' => $this->get_full_url().'/files/',
                'user_dirs' => false,
                'mkdir_mode' => 0755,
                'param_name' => 'files',
                [...]
        }
        [...]
    }
    ?>
    


    Cette classe est appelée dans le fichier index.php ("server/php/index.php").

    <?php
        error_reporting(E_ALL | E_STRICT);
        require('UploadHandler.php');
        $upload_handler = new UploadHandler(); 
    ?>
    


    J'ai aussi vu qu'une url était définie dans le fichier main.js ("js/main.js").

    $(function () {
        'use strict';
    
        // Initialize the jQuery File Upload widget:
        $('#fileupload').fileupload({
            // Uncomment the following to send cross-domain cookies:
            //xhrFields: {withCredentials: true},
            url: 'server/php/'
        });
    
        [...]
    }
    


    En modifiant ces url, le plug-in retourne une erreur lors de l'upload ...

    Merci à ceux qui ont pris la peine de me lire !
    • Partager sur Facebook
    • Partager sur Twitter
      16 décembre 2012 à 17:22:56

      Salut,

      Pour implémenter un user directory y'a cette doc. : https://github.com/blueimp/jQuery-File [...] r-directories

      As-tu essayé?

      @+, Ghislain
      • Partager sur Facebook
      • Partager sur Twitter
        16 décembre 2012 à 23:07:40

        Merci pour ta réponse.

        J'ai essayé mais n'arrive pas à le faire fonctionner.

        Dans un premier temps, je voudrais simplement envoyer les fichiers dans un autre répertoire que celui de la démo. Je pensais après faire passer ce répertoire en paramètre lors de l'instanciation du UploadHandler.

        Mais même en modifiant directement l'url dans la classe, cela ne fonctionne pas ...

        Edit :


        J'ai finalement trouvé comment modifier le répertoire de destination en dur dans le code.

        Voici le code de la classe UploadHandler.php :

        <?php
        class UploadHandler {
            [...]
            function __construct($options = null, $initialize = true) {
                $this->options = array(
                    'script_url' => $this->get_full_url().'/',
                    'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'../../../images/',
                    'upload_url' => $this->get_full_url().'../../../images/',
                    'user_dirs' => false,
            [...]
            }
        }
        ?>
        


        L'erreur venait du fait que je ne laissais que le chemin relatif vers le dossier.
        Il faut donc laisser 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'../../../images/' et 'upload_url' => $this->get_full_url().'../../../images/'.

        Il ne me reste plus qu'à trouver comment ajouter un paramètre dynamique dans cet url !
        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2012 à 16:03:14

          Bonjour,

          Je n'avais pas fait de recherches sur mon problème depuis la dernière fois où j'ai posté.
          Cependant, j'ai trouvé la solution aujourd'hui en quelques minutes de recherche.

          Je la post au cas où ça peut aider d'autres personnes ! :)

          index.php :

          J'ai simplement stocké l'ID de l'entreprise dans une variable de session
          afin de pouvoir le réutiliser dans la classe UploadHandler.php.

          <?php
              session_start() ;
          
              // Vérifier qu'un ID d'entreprise a été passé en paramètre
              if (isset($_GET['id_entreprise']) && $_GET['id_entreprise'] != '') {
          	// Stocker l'ID dans une variable de session
          	$_SESSION['id_entreprise'] = $_GET['id_entreprise'] ;
              }
              else {
          	// Rediriger l'utilisateur vers la page d'où il vient
          	echo '<SCRIPT LANGUAGE="JavaScript"> document.location.href="' . $_SERVER['HTTP_REFERER'] . '"</SCRIPT>' ;
              }
          ?>
              [...]
              <form id="fileupload" action="server/php/" method="POST" enctype="multipart/form-data">
              [...]
          


          UploadHandler.php :

          Ensuite on récupère l'ID que l'on inclus dans le chemin du répertoire.

          <?php
              session_start() ;
          
              class UploadHandler {
                  protected $options ;
          
                  protected $error_messages = array(
                      [...]
                  ) ;
          
                  function __construct($options = null, $initialize = true) {
                      $this->options = array(
                          'script_url' => $this->get_full_url().'/',
                          'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/../../../../Entreprise/' . $_SESSION['id_entreprise'] . '/Documents/',
                          'upload_url' => $this->get_full_url().'/../../../../Entreprise/' . $_SESSION['id_entreprise'] . '/Documents/',
                          [...]
                      ) ;
                      [...]
                  }
          
                  [...]
              }
          ?>
          


          On peut très bien passer le chemin complet par l'intermédiaire d'une variable de session.

          J'ai laissé mon fichier index.php à la racine du plug-in. Lorsque j'ai
          essayé en le mettant un cran en dessous dans mon arborescence, j'ai obtenu une erreur.
          • Partager sur Facebook
          • Partager sur Twitter
            8 janvier 2014 à 11:20:20

            Salut, 

            Je remonte ce sujet pour te poser une question sur le fichier UploadHandler.php.

            J'ai moi aussi besoin de modifier l'emplacement de stockage des photos. Seulement j'aimerai mettre plusieurs formulaires sur une même page avec pour chacun, des chemin différents. J'aimerai donc passer dans l'url une variable qui indique par exemple le numero du formulaire, et modifier la fonction pour dire que si le formulaire 1 est a l'origine de l'Upload on dirige les photos ici, et si le formulaire 2 est a l'origine de l'upload on les stock là.

            Seulement, où est appelé cette page ? comment faire transiter ces donnés depuis le fomulaire jusqu'au fichier UploadHandler ?

            Merci d'avance pour votre aide, 

            Florian

            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2014 à 3:45:54

              Pour faire passer des données au Handler, on peut utiliser soit formData soit les intégrer au formulaire dans des input de type hidden. Le Handler pourra les récupérer dans les $_POST.

              Formulaire:

              <input type="hidden" id="societe" name="societe" value="leroymerlin">

              Dans le UploadHandler:

              $societe=stripslashes($_POST['societe']);

              • Partager sur Facebook
              • Partager sur Twitter

              [Help] Upload fichiers multiples

              × 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