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

Symfony PHP Discussion :

Problème Upload fichier via Web Services - Symfony


Sujet :

Symfony PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème Upload fichier via Web Services - Symfony
    Bonjour à tous,

    J'ai un problème concernant un upload de fichier. Je souhaite qu'un utilisateur puisse uploader un fichier qui sera alors envoyé à un web service, tout cela sous symfony.

    Mon controller qui gere l'upload

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
     /******* ON RECUPERE LE CHEMIN POUR L'UPLOAD *******/
            $chemin = $this->get('portal_front.api_call')->getDeDocUpload();
            echo $dossier = "upload/".$chemin['dossier'].$chemin['lot']; 
     /******* CREATION DU FORMULAIRE UPLOAD *******/
            $document = new UploadFiles();
            $form = $this->createFormBuilder($document)
            ->add('name', 'text',array('label'  => ' ', 'required' => true))
            ->add('file', 'file', array('label'  => ' ', 'required' => true))
            ->add('submit', 'submit', array('label'  => 'Valider'))
            ->getForm();
        $form->handleRequest($request);
    /******* SI LE FORMULAIRE EST VALIDE *******/
        if ($form->isValid()) {
    /******* UPLOAD DU FICHIER ET ECRITURE EN BDD *******/
     
            $em = $this->getDoctrine()->getManager();
            //var_dump($document);
            //$document->upload($dossier);
            $em->persist($document);
            $em->flush();
    /******* ON ENVOI LES DONNEES AU WEBSERVICE *******/
            $data = array();
            $data["fichier"] = $document->getFile();
            $data["titre"]   = $form->getData()->getName();
            $data["chemin"]  = $dossier."/de".$user_id."_id";
            $data["file"]  = $form->getData()->getPath();
            //var_dump($data);
            $this->get('session')->getFlashBag()->add('success', 'Le fichier '.$data["titre"].' a bien été ajouté.');  
    /******* URL DU WEBSERVICE EN POST *******/
            $response = $this->client->post('/de/data-upload/'.$user_id, $data);  
            }
    Ici, j'essaye donc d'envoyer via l'url du webservice et la variable $data, tout ce dont j'ai besoin : nom, le chemin et bien sur le fichier.
    Coté web services (toujours sous symfony):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
             try {
     /* ON RECUPERE LE FICHIER, NOM ET EXTENSION */     
                $file = $request->files->get("fichier");
                $ext = $file->guessExtension();
                $name = $file->getClientOriginalName();
                $results = $request->request->all();   
     
     /* ON INSERE LES DONNEES */               
                $sql = 'INSERT INTO de_upload
                        SET id_de= :id, nom_fichier= :nom, titre_fichier = :titre, chemin = :chemin, extension= :file, id_type_doc=3';
                $query = $app['pdo']->prepare($sql);
                $exec = $query->execute(array('id' => $id, 'nom' => $name, 'titre' => $results['titre'], 'chemin' => $results['chemin'], 'file' => $ext)); 
     /* ON RECUPERE l'ID DU FICHIER DANS LA BASE */
                $sql = 'SELECT id
                       FROM de_upload
                       WHERE id_de= :id 
                       ORDER BY id DESC';
                $query = $app['pdo']->prepare($sql);
                if (!$query->execute(array('id' => $id))) {
                    return new Response($query->errorInfo()[2], Response::HTTP_FAILED_DEPENDENCY);
                }
                $content = $query->fetch(\PDO::FETCH_OBJ);
                $lastId = $content->id;
     /* ON AJOUTE L'ID AU CHEMIN ET ON UPDATE */    
                $sql = 'UPDATE de_upload SET chemin= :chemin WHERE id= :id' ;  
                $query = $app['pdo']->prepare($sql);
                $exec = $query->execute(array('id' => $lastId, 'chemin' => $newChemin)); 
    /* ON COPIE LE FICHIER DANS LE NOUVEAU REPERTOIRE */
                $newChemin = $results['chemin'].$lastId;
                $file->move("$newChemin, $name);
     
     
                return new Response($lastId, Response::HTTP_CREATED);
            } catch (Exception $e) {
                // Erreur : code HTTP 500
              return new Response($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
            }
    Lorsque je le fais sous Postman, qui permet de simuler l'upload de fichier. Le fichier est bien copié dans le nouveau répertoire, aucun problème.

    Mais lorsque je passe par mon appli, le webservice créé un fichier nommé "fichier" en .txt qui contient un adresse de type /tmp/phpBHDG.tmp. L'insertion en BDD se fait sans problème et le fichier se créé également dans le bon dossier. Mais je ne comprends pas pourquoi, il créé un simple fichier.txt avec une adresse à l’intérieur. Jai l'impression que l'envoi de "$data["fichier"] = $document->getFile();" ne se fait pas correctement ou alors je n'arrive pas à traiter l'info coté webservices. le var_dump du $data["fichier"] dans le cas d'un upload d'une image basique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    object(Symfony\Component\HttpFoundation\File\UploadedFile)[9]
      private 'test' => boolean false
      private 'originalName' => string 'Tree.jpg' (length=8)
      private 'mimeType' => string 'image/jpeg' (length=10)
      private 'size' => int 770042
      private 'error' => int 0
    Des avis sur où j'ai pu me tromper?

    Merci d'avance !

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour !
    Avez vous résolu ? Mersi de me donner un tuto pour cet truc !

Discussions similaires

  1. problème upload fichier sur serveur web
    Par gamiel dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2012, 01h27
  2. Accès à un fichier xml via web service
    Par m3allem001 dans le forum Services Web
    Réponses: 2
    Dernier message: 27/04/2009, 19h16
  3. [Web Service][SOAP] Envoyer des fichiers volumineux via web services
    Par kaboume dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/12/2007, 12h06
  4. [Upload] Problème Upload Fichiers via html
    Par Typhon dans le forum Langage
    Réponses: 3
    Dernier message: 11/02/2007, 12h52
  5. [Web] Upload fichier via formulaire HTTP
    Par nik00s dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/08/2005, 13h27

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