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

Zend_Form PHP Discussion :

Renomage de fichier uploadé


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut Renomage de fichier uploadé
    Bonjour,

    Comme le dit le titre je cherche à renommer un fichier uploadé, pour éviter les conflits de nom éventuel. Ce renommage est un salt du nom du fichier initial.

    Ceci est mon contrôleur actuel :
    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
    public function uploadAction(){
     
        $destination = realpath('/home/web/media/images');
        $type = $this->_request->getParam('type');
     
        $this->view->title = "Upload de fichiers";
        $form = new UploadFormulaireItem($type);
        $form->submit->setLabel('Uploader');
        $this->view->form = $form;
     
        if ($form->fichier->isUploaded()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
            $fichier = new Zend_File_Transfer_Adapter_Http();
            $fichier->setDestination($destination)
                    ->receive();
            echo 'Uploadé avec succès';
            } else {
            $form->populate($formData);}
        }
    }
    Voici mon modèle UploadFormulaireItem :

    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
    <?php
    class UploadFormulaireItem extends Zend_Form
    {
        public function __construct($options = null)
        {   // $options contient le type du fichier qui doit être uploadé
            parent::__construct($options);
            $this->setName('upload');
            $this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
     
            $validator['image']['size'] = '4096000'; // 4 Mo
            $validator['image']['extension'] = 'gif,jpg,jpeg,bmp,png';
            $validator['image']['mimetype'] = 'image/png,image/jpeg,image/gif,image/bmp';
     
            $validator['video']['size'] = '20480000'; // 20 Mo
            $validator['video']['extension'] = 'flv';
            $validator['video']['mimetype'] = 'video/x-flv';
     
            $id = new Zend_Form_Element_Hidden('id');
     
            $fichier = new Zend_Form_Element_File('fichier');
            $fichier->setMaxFileSize($validator[$options]['size'])
                    ->addValidator('NotEmpty',false,array('messages' => array( 'isEmpty' =>'Merci de définir le fichier à uploader')))
                    ->addValidator('Count', false, 1)
                    ->addValidator('Size', false, array( 'max' => $validator[$options]['size'] ,
                                                         'messages' => array(
                                                         'fileFilesSizeTooBig' => 'Le fichier est trop gros',
                                                         'fileFilesSizeNotReadable' => 'La taille du fichier n\'a pu être lue'
                                                         )))
                    ->addValidator('Extension', false, array( 'type' => $validator[$options]['extension'],
                                                              'messages' => array(
                                                              'fileExtensionFalse' => 'L\'extension du fichier n\'est pas autorisée',
                                                              'fileExtensionNotFound' => 'Aucune extension de fichier trouvée'
                                                            )))
     
                    ->addValidator('MimeType', false, array( 'type' => $validator[$options]['mimetype'],
                                                             'messages' => array(
                                                             'fileMimeTypeFalse' => 'Le type de fichier n\'est pas le bon',
                                                             'fileMimeTypeNotDetected' => 'Le type du fichier n\'a pu être trouvé',
                                                             'fileMimeTypeNotReadable' => 'Le fichier n\'a pas pas pu être lu'
                                                            )));
     
            $submit = new Zend_Form_Element_Submit('submit');
            $submit->setAttrib('id', 'submitbutton');
     
            $this->addElements(array($fichier, $submit));
        }
    }
    J'ai entendu parlé du filtre Rename, mais je ne vois pas comment m'en servir, puisque je dois définir le filtre dans mon modèle, et que dans le modèle on ne connait pas encore le nom du fichier :/
    Dois-je (et puis-je) rajouter le filtre juste avant le receive() ? Il y aurait un problème alors car pour créer le filtre je dois utiliser le nom du fichier que je récupère via getFileName du Zend_File_Transfer_Adapter_Http, mais pour cela je dois d'abord faire l'upload !

    Il y aurait une solution qui consisterait à ne pas se servir du nom du fichier et à créer le nom à partir de l'id de l'enregistrement (oui chaque upload vient se rattacher à une entrée de la bdd) mais je préférerais garder la méthode de salt. Quelqu'un a-t-il une issue ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    Bon, j'ai laissé de côté cette partie pendant que je développais le reste mais la il me faut une issue :p

    J'me suis rendu compte que je ne pouvais même pas me baser sur l'id, car je ne connaitrais même pas l'extension exacte du fichier.

    Il faut croire que personne n'upload de fichier avec Zend car il n'est donné nulle part sur la toile un cas concret. Je refuse de croire que personne sur ce forum n'a la solution.


  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Il faut que tu crées ton propre filtre, qui étende Zend_Filter_Interface.

    Tu peux t'inspirer du filtre Zend_Filter_File_Rename, et principalement sa méthode filter() (dans un premier temps, tu peux même te contenter de définir cette méthode).

    Le paramètre passé à la méthode filter() est le nom du fichier téléchargé. il suffit donc que cette méthode calcule le nouveau nom de fichier, renomme le fichier, puis retourne ce nouveau nom...

Discussions similaires

  1. [Upload] Type MIME de fichiers à uploader
    Par franculo_caoulene dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 09h49
  2. Fichier upload endommagé ?
    Par zefrit dans le forum Linux
    Réponses: 26
    Dernier message: 14/10/2005, 15h16
  3. Supprimer fichier uploader avec aspSmartUpload
    Par julio_097 dans le forum ASP
    Réponses: 2
    Dernier message: 11/08/2005, 16h27
  4. renommer un fichier uploadé
    Par Sowa dans le forum ASP
    Réponses: 2
    Dernier message: 07/02/2005, 09h23
  5. Réponses: 10
    Dernier message: 18/11/2003, 18h01

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