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 :

Upload de fichier [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut Upload de fichier
    Bonjour à tous,

    aujourd'hui, j'ai un petit problème avec l'upload de fichiers, ce n'est pas moi qui ai fait le code, c'est un des co-développeurs. J'ai regardé, et de ce que j'en ai vu, ça ressemble énormément à ce qui est fait sur la doc de symfony : http://symfony.com/fr/doc/master/coo...e_uploads.html.

    En plus de ce qu'il y a sur la doc il y a un slug (GEDMO) qui "nettoie" le champ qu'on a utilisé pour nommer le fichier.

    Lorsque le champ qu'on a utilisé est modifié, le slug est modifié, mais le fichier ne l'est pas.

    ex :

    champ utilisé : titre
    titre : titre 1
    slug : titre-1
    le fichier stocké est donc titre-1.extension

    ensuite : on modifie le titre :

    titre : titre 2
    => slug passe à titre-2
    mais le fichier titre-1.extension reste nommé de la même façon.

    du coup lorsque je fais appel aux méthodes getWebPath() ou encore getAbsolutePath(), elles me renvoient un truc du style : /.../.../titre-2.extension.
    Ce qui ne correspond pas au bon fichier voir à rien.

    Est ce que quelqu'un aurait une piste à me donner pour réussir à modifier le nom de mon fichier? Ou alors existe-t-il un mécanisme plus simple qui répondrait bien à mon besoin?

    Si vous avez besoin de plus de précisions n'hésitez surtout pas à me les demander.

    Merci d'avance à ceux qui se pencheront sur mon problème. Bonne journée à tous !

  2. #2
    Membre confirmé Avatar de flutz
    Homme Profil pro
    Ingénieur d'études et développement
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Par défaut
    Même si ça ressemble je pense qu'il serait intéressant d'avoir le code.
    Et sinon tu nous envois une doc de Symfony 1 et non 2, même s'il y a la même en V2 au final : http://symfony.com/doc/2.0/cookbook/...e_uploads.html

    Sinon j'ai pas travaillé avec les fichiers je ne pourrais pas t'aider:/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut
    Rebonjour,

    Alors j'ai changé mon code, j'ai reglé le problème du dessus mais un autre est apparu.

    Tout d'abord je vous explique ce que j'ai fait, j'ai utilisé le code du cookbook :

    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
     
     
    /**
     * @ORM\Entity
     * @ORM\HasLifecycleCallbacks
     */
    class Document
    {
       /**
         * @Assert\File(maxSize="6000000")
         */
        public $file;
     
     
       /**
         * @ORM\Column(type="string", length=255, nullable=true)
         */
        public $path;
     
     
     
        /**
         * @ORM\PrePersist()
         * @ORM\PreUpdate()
         */
        public function preUpload()
        {
            if (null !== $this->file) {
                // do whatever you want to generate a unique name
                $this->path = sha1(uniqid(mt_rand(), true)).'.'.$this->file->guessExtension();
            }
        }
     
        /**
         * @ORM\PostPersist()
         * @ORM\PostUpdate()
         */
        public function upload()
        {
            if (null === $this->file) {
                return;
            }
     
            // if there is an error when moving the file, an exception will
            // be automatically thrown by move(). This will properly prevent
            // the entity from being persisted to the database on error
            $this->file->move($this->getUploadRootDir(), $this->path);
     
            unset($this->file);
        }
     
        /**
         * @ORM\PostRemove()
         */
        public function removeUpload()
        {
            if ($file = $this->getAbsolutePath()) {
                unlink($file);
            }
        }
    }
    Ça fonctionne plutôt bien, mais si je décide de changer juste le fichier (mon entité à d'autres attributs que file et path) , sans changer les autres champs de mon entité et bien ça ne fonctionne pas, le fichier reste celui du début, alors que si je change un autre attribut plus le fichier, et bien là le nouveau fichier est bien uploadé et là pas de soucis !

    Dites moi ce que vous en pensez, si vous avez une piste, je suis preneur!

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,
    c'est expliqué dans la doc:
    http://symfony.com/doc/2.0/cookbook/...ycle-callbacks
    The PreUpdate and PostUpdate callbacks are only triggered if there is a change in one of the entity's field that are persisted. This means that, by default, if you modify only the $file property, these events will not be triggered, as the property itself is not directly persisted via Doctrine. One solution would be to use an updated field that's persisted to Doctrine, and to modify it manually when changing the file.
    généralement je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function setFile($file){
    $this->file=$file;
    $this->uploadedAt=new \DateTime();
    }
    ou "uploadedAt" est un attribut persisté dans la base de données.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut
    Oops ... c'est vrai que je n'ai pas lu la doc en entier ... milles excuses !

    J'ai fais ce que tu m'a dit de faire, mais je ne suis pas sûr de bien avoir compris, est ce que le setFile est censé être appelé implicitement lorsque le fichier est changé ou alors est ce qu'il faut l'appeler "manuellement"?? Parce qu'en rajoutant uniquement ce que tu m'as donné, ça ne fonctionne pas.

    En tout cas merci de ton aide, je sens que j'approche de la résolution de ce problème d'upload.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut
    Un petit up!

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

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. Upload de fichier par XMLHTTP
    Par Immobilis dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 17h02
  3. upload de fichier
    Par 120 dans le forum ASP
    Réponses: 16
    Dernier message: 21/06/2004, 12h07
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

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