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 ?