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 :

Écraser un fichier au téléversement


Sujet :

Symfony PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Écraser un fichier au téléversement
    Bonjour à tous,

    Je suis actuellement entrain de mettre en place un système d'upload de logo pour mon site en suivant le cookbook Symfony, j'utilise le dernier bloc de code, celui qui prends comme identifiant l'id de l'objet.

    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
     
    /**
         * @ORM\PrePersist()
         * @ORM\PreUpdate()
         */
        public function preUpload()
        {
            if (null !== $this->file) {
                $this->imagePath = $this->file->guessExtension();
            }
        }
     
        /**
         * @ORM\PostPersist()
         * @ORM\PostUpdate()
         */
        public function upload()
        {
            if (null === $this->file) {
                return;
            }
     
            // you must throw an exception here if the file cannot be moved
            // so that the entity is not persisted to the database
            // which the UploadedFile move() method does
            $this->file->move($this->getUploadRootDir(), $this->id.'.'.$this->file->guessExtension());
            unset($this->file);
        }
    La création et la suppression fonctionne bien. Par contre lorsque je veux éditer mon entité, impossible de réuploader une image qui viendrais écraser l'ancienne (voir même upload une image lorsqu'aucune image n'a été uploader a la creation). le formulaire se modifie mais l'image est toujours celle d'origine. Est-ce quelqu'un aurait une explication? Je suppose qu'il doit y avoir quelque chose avec la methode upload() mais la je cale vraiment

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    peu etre un problème de cache, si tu pointe directement vers le lien de l'image elle change ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    J'y ai penser aussi et j'ai vérifier directement dans le dossier directement mais la rien ne change non plus

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    la méthode move renvoie le path, vérifie si c'est ok

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Oui mais comment?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    comme tu veux , un var_dump suffit

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(Symfony\Component\HttpFoundation\File\File)#42 (2) { ["pathName":"SplFileInfo":private]=> string(103) "/var/www/INeedBackUp/src/Tantan/INeedBackUpBundle/Entity/../../../../web/media/image/entreprises/35.jpg" ["fileName":"SplFileInfo":private]=> string(6) "35.jpg" }
    Voila ce que j'ai ou 35 est bien l'id de la prochaine entrer donc la ca va

    Mais j'ai remarque que lorsque je fais un upload(donc pas une creation) il n'entre même pas dans la fonction upload, il manque p-e une commentaire "@PreEdition" ou quelque chose comme ca?

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bon je pense avoir compris d’où vient une partie duprobleme. Comme dit dans le cookbook
    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.
    Par contre je comprends pas quel est la solution qu'il propose

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Salut, j'ai actuellement le même problème que toi, seulement la première upload à la création est prise en compte. Je pense comme toi que la fonction preUpdate n'est jamais appelé car aucun changement n'est effectué sur l'un des champs de l'entité.
    Peut être avec un champ hidden du style "uploadNumber" que l'on incrémente automatiquement à chaque changement de photo? Un peu bricolé mais bon ça doit marcher. Si entre temps tu as trouvé une meilleur solution je suis preneur.
    De mon côté je vais chercher un peu et je te tiens au jus

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Finalement mon problème provenait d'un autre bundle. J'ai installé AvalancheImagine qui garde en cache l'ancienne photo. Dans mon dossier uploads j'ai bien la nouvelle photo. Par contre dans le cache d'avalanche j'ai tjs l'ancienne.

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    dans ma fonction upload j ai rajoute ce code pour clear le cache d avalanche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            $avalanche_folder = __DIR__.'/../../../../../web/media/cache';
            if($handle = opendir($avalanche_folder)){
                while($file = readdir($handle)){
                    if ($file != '.' && $file != '..'){
                        $preset_file = $avalanche_folder.'/'. $file .'/'.$this->getUploadDir().'/'.$this->name . '.' . $this->file->guessExtension();
                        if(file_exists($preset_file)){
                            unlink($preset_file);
                        }
                    }
     
                }
            }

Discussions similaires

  1. [JFileChooser.showSaveDialog] et ne pas écraser un fichier existant
    Par sepas dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/08/2008, 22h34
  2. [FTP] écraser un fichier existant en ftp avec php
    Par seb nantes dans le forum Langage
    Réponses: 6
    Dernier message: 20/12/2007, 00h01
  3. Ajouter une ligne en fin de fichier sans écraser le fichier
    Par Premium dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 05/04/2007, 13h07
  4. [Upload] Comment écraser un fichier après un upload
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 21/03/2007, 14h30
  5. écraser un fichier existant
    Par karibouxe dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 14h11

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