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 :

uploader un fichier avec symfony 3 [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut uploader un fichier avec symfony 3
    Bonjour,
    Je veux uploader un fichier avec smyfony 3, j'ai suivie la documentation mais il y a impossible de supprimer le fichier dans le répertoire web lalors qu'il est bien supprimé dans doctrine .

    Je décide donc de passer par créer un service et en utilisant un Listener Doctrine. Cependant j'ai une erreur simple à comprendre mais que je n'arrive pas à resoudre :

    ClassNotFoundException in appDevDebugProjectContainer.php line 340:
    Attempted to load class "BrochureUploadListener" from namespace "Oxy\EmploiBundle\EventListener".
    Did you forget a "use" statement for another namespace?

    mon service.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        app.brochure_uploader:
            class: Oxyjob\EmploiBundle\FileUploader
            arguments: ['%brochures_directory%']
     
        app.doctrine_brochure_listener:
            class: Oxyjob\EmploiBundle\EventListener\BrochureUploadListener
            arguments: ['@app.brochure_uploader']
            tags:
                - { name: doctrine.event_listener, event: prePersist }
                - { name: doctrine.event_listener, event: preUpdate }
    config.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    parameters:
        locale: fr
        brochures_directory: '%kernel.root_dir%/../web/uploads/brochures'
    EventListener.php ajouté à la racine de EmploiBundle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php
    // src/AppBundle/EventListener/BrochureUploadListener.php
    namespace Oxy\EmploiBundle\EventListener;
     
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    use Doctrine\ORM\Event\LifecycleEventArgs;
    use Doctrine\ORM\Event\PreUpdateEventArgs;
    use Oxy\EmploiBundle\Entity\document;
    use Oxy\EmploiBundle\FileUploader;
    use Symfony\Component\HttpFoundation\File\File;
    class BrochureUploadListener
    {
    private $uploader;
     
    public function __construct(FileUploader $uploader)
    {
    $this->uploader = $uploader;
    }
     
    public function prePersist(LifecycleEventArgs $args)
    {
    $entity = $args->getEntity();
     
    $this->uploadFile($entity);
    }
     
    public function preUpdate(PreUpdateEventArgs $args)
    {
    $entity = $args->getEntity();
     
    $this->uploadFile($entity);
    }
     
    private function uploadFile($entity)
    {
    // upload only works for Product entities
    if (!$entity instanceof document) {
    return;
    }
     
    $file = $entity->getDocument();
     
    // only upload new files
    if (!$file instanceof UploadedFile) {
    return;
    }
     
    $fileName = $this->uploader->upload($file);
    $entity->setDocument($fileName);
    }
     
      public function postLoad(LifecycleEventArgs $args)
      {
        $entity = $args->getEntity();
     
        $fileName = $entity->getBrochure();
     
        $entity->setBrochure(new File($this->targetPath.'/'.$fileName));
      }
    }
    FileUploader.php racine de EmploiBundle
    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
     
     
    <?php
     
    namespace Oxy\EmploiBundle;
     
    use Symfony\Component\HttpFoundation\File\UploadedFile;
     
     
     
    class FileUploader {
      private $targetDir;
     
      public function __construct($targetDir)
      {
        $this->targetDir = $targetDir;
      }
     
      public function upload(UploadedFile $file)
      {
        $fileName = md5(uniqid()).'.'.$file->guessExtension();
     
        $file->move($this->targetDir, $fileName);
     
        return $fileName;
      }
    }
    Entité document
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    <?php
     
    namespace Oxy\EmploiBundle\Entity;
    use FOS\UserBundle\Model\User as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
    /**
     * document
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Oxy\EmploiBundle\Repository\documentRepository")
     * @ORM\HasLifecycleCallbacks
     */
    class document
    {
        /**
         * @var int
         */
        private $id;
     
      /**
       * @ORM\ManyToOne(targetEntity="Oxyj\UserBundle\Entity\Utilisateurs", cascade={"persist", "remove"})
       * @ORM\JoinColumn(nullable=true)
       */
        private $utilisateur;
     
     
        /**
         * @ORM\Column(type="string")
         *
         * @Assert\NotBlank(message="Please, upload the product brochure as a PDF file.")
         * @Assert\File(mimeTypes={ "application/pdf" })
         */
        public $document;
     
     
     
        public function __toString() {
            return $this->curriculumVitae;
        }
     
        /**
         * @return int
         */
        public function getId() {
            return $this->id;
        }
     
        /**
         * @param int $id
         */
        public function setId($id) {
            $this->id = $id;
        }
     
        /**
         * @return mixed
         */
        public function getUtilisateur() {
            return $this->utilisateur;
        }
     
        /**
         * @param mixed $utilisateur
         */
        public function setUtilisateur($utilisateur) {
            $this->utilisateur = $utilisateur;
        }
     
        /**
         * @return mixed
         */
        public function getDocument() {
            return $this->document;
        }
     
        /**
         * @param mixed $document
         */
        public function setDocument($document) {
            $this->document = $document;
        }
     
    }
    J'ai suivi la doc :
    http://symfony.com/doc/current/contr...load_file.html

    Apparemment il manque un Use mais aucun ne fonctionne ...j'ai du louper quelques choses.
    Impossible du coup de supprimer le cache. En le supprimant manuellement , cela ne resoud pas le problème.
    Merci d'avance
    Laurent

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Oxy\EmploiBundle\FileUploader

    dans la structure de ton projet, ou est exactement FileUploader.php ?

  3. #3
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    J'ai un Bundle Oxy/EmploiBundle et FileUploader.php et EvenListener.php sont dans Emploi Bundle , à la racine
    Je te donner l'image du projet ...Nom : 2016-10-06_154601.png
Affichages : 2105
Taille : 9,2 Ko

  4. #4
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    bon je suis pas fiere, quelques minutes hors de mon écran pour voir qu'il fallait mettre un répertoire EventListener et ajouter le fichier BrochureUploaderListener avec sa classe . normal j 'ai fait n'importe quoi ..
    Par contre si je suprrime le fichier dans un crud. dans la base de donnée c'est bien supprimé mais mon fichier reste la dans uploads/brochures.
    ?Nom : 2016-10-06_160137.png
Affichages : 2130
Taille : 4,0 Ko

    Tu as peut être une idée, comment supprimer le fichier dans le répertoire web en même temps que l'insertion dans la base ;-)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Bonjour,
    pour supprimer ce fichier a partir de son id :
    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
     
        /**
         * @ORM\PreRemove()
         */
        public function removeUpload()
        {
            if ($file = $this->getAbsolutePath()) {
                unlink($file);
            }
        }
     
        public function getAbsolutePath()
        {
            return null === $this->path ? null : $this->getUploadRootDir().'/'.$this->id.'.'.$this->path;
        }

  6. #6
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Super !! Apparemment la doc symfony ne fourni pas tout... pour la suppression . Tu l'ajoute dans l'entité , pour mon cas document ? Comme pour symfony 2
    Cela fonctionne pas le fichier ne se supprime pas ... :-)

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    la doc est complete ici , je sais pas si c'est valable pour sf 3

  8. #8
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Malheureusement cela ne fonctionne pas avec symfony 3 . je faisais comme ca avec symfony 2 mais avec symfony 3 .... je sais pas ... merci quand même

  9. #9
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    En mixant les deux méthodes

    Dans l'entité document.php j'ajoute la méthode removeDocument() avec les fonctions permettant de retrouver le chemin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    ...
        /**
         * @param mixed $document
         */
        public function setDocument($document) {
            $this->document = $document;
        }
     
     
        public function getAbsolutePath()
        {
            return null === $this->document
                    ? null
                    : $this->getUploadRootDir().'/'.$this->document;
        }
     
        protected function getUploadRootDir()
        {
            // the absolute directory path where uploaded
            // documents should be saved
            return __DIR__.'/../../../../web/'.$this->getUploadDir();
        }
        protected function getUploadDir()
        {
            // get rid of the __DIR__ so it doesn't screw up
            // when displaying uploaded doc/image in the view.
            return 'uploads/brochures';
        }
        /**
         * @ORM\PreRemove()
         */
        public function removeDocument() {
            if ($file = $this->getAbsolutePath()) {
                unlink($file);
                rmdir($file);
            }
        }
     
    ...
    j’appelle la fonction dans le controller au moment de la suppression

    documentController.php
    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
     
        public function deleteAction($id)
        {
     
            $em = $this->getDoctrine()->getManager();
            $document = $em->getRepository('OxyjobEmploiBundle:document')->find($id);
     
            if (! $document ) {
                throw $this->createNotFoundException(
                        'Aucun document'
                );
            }
     
            /* appel à la fonction du suppression du document  */
            $doc = new document();
            $doc->removeDocument();
            $em->remove( $document );
            $em->flush();
     
            return $this->redirectToRoute('document_index');
     
     
            }
    Mais cela ne fonction pas ... je suis sûr que c'est à cause du chemin non trouvé ... mais aucune erreur
    Quelqu'un à t'il eu se problème ou a t'il réussi à gérer les suppression de fichier upload dans un dossier/uploads/brochures/ en même temps que la suppression dans la base de donnée ?
    Merci d''avance

  10. #10
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    J'ai du supprimer mon bundleEmploi qui contenait les fichier .orm.yml qui provoquait pas mal de problème dans mon projet, j'ai réécris à la main l'entité et le reste . Désormais je ne générerai plus à l'aide de la console sauf pour la commande doctrine:schema:update.
    J'ai utilisé l’ancienne méthode de symfony 2 pour les upload et cela fonctionne . J'ai supprimé le service upload pour symfony 3.

    mon entité document
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    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
     
     
    <?php
     
    namespace Oxy\EmploiBundle\Entity;
    use FOS\UserBundle\Model\User as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    /**
     * Document
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Oxy\EmploiBundle\Repository\DocumentRepository")
     * @ORM\HasLifecycleCallbacks
     */
    class Document {
      /**
       * Constructor
       */
      public function __construct()
      {
        $this->document = new \Doctrine\Common\Collections\ArrayCollection();
      }
      /**
       * @ORM\Id
       * @ORM\Column(type="integer")
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      private $id;
     
      /**
       * @ORM\ManyToOne(targetEntity="Oxy\UserBundle\Entity\Utilisateurs", inversedBy="curriculumVitae")
       * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
       */
      private $utilisateur;
     
      /**
       * @Assert\File(maxSize="6000000")
       */
      private $file;
     
      /**
       * @ORM\Column(type="string", length=255, nullable=true)
       */
      public $path;
     
     
      public function getAbsolutePath()
      {
        return null === $this->path
                ? null
                : $this->getUploadRootDir().'/'.$this->path;
      }
     
      public function getWebPath()
      {
        return null === $this->path
                ? null
                : $this->getUploadDir().'/'.$this->path;
      }
     
      protected function getUploadRootDir()
      {
        // the absolute directory path where uploaded
        // documents should be saved
        return __DIR__.'/../../../../web/'.$this->getUploadDir();
      }
     
      protected function getUploadDir() {
        // get rid of the __DIR__ so it doesn't screw up
        // when displaying uploaded doc/image in the view.
        return 'uploads/document';
      }
     
      /**
       * Sets file.
       *
       * @param UploadedFile $file
       */
      public function setFile(UploadedFile $file = null)
      {
        $this->file = $file;
      }
     
      /**
       * Get file.
       *
       * @return UploadedFile
       */
      public function getFile()
      {
        return $this->file;
      }
     
     
     
      public function upload()
      {
        if (null === $this->getFile()) {
          return;
        }
     
        $this->getFile()->move(
                $this->getUploadRootDir(),
                $this->getFile()->getClientOriginalName()
        );
     
        $this->path = $this->getFile()->getClientOriginalName();
     
        $this->file = null;
      }
     
     
     
      /**
       * @ORM\PreRemove()
       */
      public function removeUpload()
      {
        if ($file = $this->getAbsolutePath()) {
          unlink($file);
        }
      }
     
     
     
     
      /**
       * @return int
       */
      public function getId() {
        return $this->id;
      }
     
      /**
       * @param int $id
       */
      public function setId($id) {
        $this->id = $id;
      }
     
      /**
       * @return mixed
       */
      public function getUtilisateur() {
        return $this->utilisateur;
      }
     
      /**
       * @param mixed $utilisateur
       */
      public function setUtilisateur($utilisateur) {
        $this->utilisateur = $utilisateur;
      }
     
     
      /**
       * Add utilisateur
       *
       * @param \Oxy\UserBundle\Entity\Utilisateurs $utilisateur
       *
       * @return utilisateur
       */
      public function addUtilisateur(\Oxy\UserBundle\Entity\Utilisateurs $utilisateur)
      {
        $this->utilisateur[] = $utilisateur;
     
        return $this;
      }
     
      /**
       * Remove utilisateur
       *
       * @param \Oxyb\UserBundle\Entity\Utilisateurs $utilisateur
       */
      public function removeUtilisateur(\Oxy\UserBundle\Entity\Utilisateurs $utilisateur)
      {
        $this->utilisateur->removeElement($utilisateur);
      }
     
    }

    mon documentType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
     
    namespace Oxy\EmploiBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
     
    use Symfony\Component\Form\Extension\Core\Type\FileType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Symfony\Component\Validator\Constraints as Assert;
     
     
    class DocumentType extends AbstractType
    {
      /**
       * @param FormBuilderInterface $builder
       * @param array $options
       */
      public function buildForm(FormBuilderInterface $builder, array $options)
      {
        $builder
     
                ->add('utilisateur', null,array( 'attr'=>array('style'=>'display:none;'), 'label' => false))
                ->add('file', FileType::class, array('data_class' => null));
     
      }
     
      /**
       * @param OptionsResolver $resolver
       */
      public function configureOptions(OptionsResolver $resolver)
      {
        $resolver->setDefaults(array(
                'data_class' => 'Oxy\EmploiBundle\Entity\Document'
        ));
      }
     
      /**
       * @return string
       */
      public function getName()
      {
        return 'oxy_emploibundle_document';
      }
    }
    mon documentController
    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
     
      public function newAction(Request $request)
      {
        /*  recuperation de l'utilisateur courant   */
        $user = $this->getUser();
        $document = new Document();
        /*  remplir le champs de l'utilisateur du formulaire par l'utilisateur courant    */
        $document->setutilisateur($user);
     
        $form = $this->createForm('Oxy\EmploiBundle\Form\DocumentType', $document);
        $form->handleRequest($request);
     
        if ($form->isSubmitted() && $form->isValid()) {
     
          $document->upload();
          $em = $this->getDoctrine()->getManager();
          $em->persist($document);
          $em->flush();
     
          return $this->redirectToRoute('document_index', array('id' => $document->getId()));
        }
     
        return $this->render('OxyEmploiBundle:Document:nouveau.html.twig', array(
                'document' => $document,
                'form' => $form->createView(),
        ));
      }

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

Discussions similaires

  1. [2.x] upload de fichiers avec symfony 2.3.7 et php5
    Par mounia_emsi dans le forum Symfony
    Réponses: 3
    Dernier message: 03/01/2014, 12h37
  2. Upload de fichier avec jsp
    Par fx2024 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/06/2006, 18h02
  3. Réponses: 3
    Dernier message: 09/05/2006, 00h31
  4. [Upload] Upload de fichier avec un script PHP
    Par largolgd dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2006, 16h21
  5. Upload de fichier avec variable passée en paramètre
    Par reservoirdev dans le forum ASP
    Réponses: 2
    Dernier message: 22/04/2006, 17h06

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