Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-04-2009 19:09:36

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

[ZF 1.7] Renommer une image après upload

Bonjour à tous,

J'upload une image dans un dossier temporaire. A partir de celle ci, je créé une miniature et une image de taille moyenne. Dans un deuxième de temps je récupère la valeur de l'identifiant qui est auto-incrémenté. Jusque là je n'ai pas de problème.
Je souhaite donc déplacer mon image dans le dossier "archives" et la renommer avec cet identifiant que je viens de récupérer.

Voici l'élément file de mon formulaire :

Code:

// Champ upload "nomFichier"
$nomFichier = new Zend_Form_Element_File("nomFichier");
$nomFichier->setLabel("Fichier");
$nomFichier->setRequired(true);
$nomFichier->setDestination("/home/jbunelcr/www/public/photos/tmp");
$nomFichier->setMaxFileSize(102400);
$nomFichier->setDecorators(array('Composite'));
$this->addElement($nomFichier);

Voici le code de mon controller :

Code:

// Création d'un upplet vide
$photo = $this->_photoTable->createRow();

// Création du formulaire et déclaration des paramètres généraux
$form = new My_Form_Photo();
$form
->setAction($this->view->link('photo', 'edit', null, '', 'default', !$isUpdated))
->setMethod("post")
->setEnctype(Zend_Form::ENCTYPE_MULTIPART)
->setDefaults($photo->toArray());
        
//
if($this->getRequest()->isPost() && $form->isValid($_POST))
{
    // Retrait des informations depuis les données en post
    // et ajout dans le modèle
    $values = $form->getValues();
    $photo->setFromArray(array_intersect_key($values, $photo->toArray()));
    
    $constantes = Zend_Registry::get("constantes");
    $location = $form->nomFichier->getFileName();
    $mimeType = $form->nomFichier->getTypeMime();
    
    $photo->save();
    
    $lastId = $this->_photoTable->getAdapter()->lastInsertId();
            
    // Traitement du fichier uploadé dans le fichier temp
    $visuel = My_ImageFactory::factory($location);
    $nomVisuel = $photo->idPhoto.$visuel->makeExtension();
    
    //IMAGE ICONE
    $visuel->redimensionner($constantes["largeur_mini"], $constantes["rep_photo_mini"].$nomVisuel);
    
    //IMAGE WEB
    $visuel->redimensionner($constantes["largeur_web"], $constantes["rep_photo_web"].$nomVisuel);
            
    $dest = $constantes["rep_photo_archive"].$nomVisuel;
    
    $photo->nomFichier = $nomVisuel;
    $photo->typeMime = $mimeType;
            
    // Redirection vers la liste des familles
    //$this->_redirect("/lister-les-photos-page-1");
    // Sauvegarde des données
    $photo->save();
}

J'ai besoin d'un coup de main svp.

Hors ligne

 

#2 19-04-2009 20:01:27

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [ZF 1.7] Renommer une image après upload

j'avoue que je ne comprends pas

peux tu utiliser le bb code  [ code ]
pour qu'on puisse lire clairement

et tu fais

Code:

$photo->nomFichier = $nomVisuel

pourquoi tu fais pas

Code:

$photo->nomFichier = '/mon/dossier/que/j'/aime/bien/mon.nom.de.fichier'

je ne comprends pas où est ton problème.
A+JYT

Hors ligne

 

#3 19-04-2009 20:26:30

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

En fait j'upload mon image dans un dossier temporaire ("/home/jbunelcr/www/public/photos/tmp") :

Code:

// Champ upload "nomFichier"
$nomFichier = new Zend_Form_Element_File("nomFichier");
$nomFichier->setLabel("Fichier");
$nomFichier->setRequired(true);
$nomFichier->setDestination("/home/jbunelcr/www/public/photos/tmp");
$nomFichier->setMaxFileSize(102400);
$nomFichier->setDecorators(array('Composite'));
$this->addElement($nomFichier);

Ensuite dans mon controller, je créé un row vide ($this->_photoTable est un objet Zend_Db_Table)

Code:

// Création d'un upplet vide
$photo = $this->_photoTable->createRow();

Ensuite

Code:

// Création du formulaire et déclaration des paramètres généraux
$form = new My_Form_Photo();
$form
->setAction($this->view->link('photo', 'edit', null, '', 'default', !$isUpdated))
->setMethod("post")
->setEnctype(Zend_Form::ENCTYPE_MULTIPART)
->setDefaults($photo->toArray());
       
if($this->getRequest()->isPost() && $form->isValid($_POST))
{
    // Retrait des informations depuis les données en post
    // et ajout dans le modèle
    $values = $form->getValues();
    $photo->setFromArray(array_intersect_key($values, $photo->toArray()));
   
    $constantes = Zend_Registry::get("constantes");
    $location = $form->nomFichier->getFileName();
    $mimeType = $form->nomFichier->getTypeMime();

    // Je fais une première sauvegarde des premières informations
    $photo->save();
   
    // Je récupère le dernière identifiant 
    $lastId = $this->_photoTable->getAdapter()->lastInsertId();
           
    // Traitement du fichier uploadé dans le fichier temp
    $visuel = My_ImageFactory::factory($location);
    $nomVisuel = $lastId.$visuel->makeExtension();
   
    //Création d'une image miniature a partir du dossier temporaire
    $visuel->redimensionner($constantes["largeur_mini"], $constantes["rep_photo_mini"].$nomVisuel);
   
    //Création d'une image intermédiaire a partir du dossier temporaire
    $visuel->redimensionner($constantes["largeur_web"], $constantes["rep_photo_web"].$nomVisuel);
    
    //A partir de là je souhaite mettre mon image qui est dans le dossier temporaire spécifié dans le setDestination ("/home/jbunelcr/www/public/photos/tmp") dans le dossier "/home/jbunelcr/www/public/photos/archives" tout en la renommant avec $nomVisuel au lieu qu'elle prenne le meme nom que celle de l'image d'origine qui sur le PC du client.

    $dest = $constantes["rep_photo_archive"].$nomVisuel;

    // Correspond à la colonne nomFichier de la table photo
    $photo->nomFichier = $nomVisuel;
   // Correspond à la colonne typeMime de la table photo
    $photo->typeMime = $mimeType;
           
    // Redirection vers la liste des familles
    //$this->_redirect("/lister-les-photos-page-1");
    // Sauvegarde des données
    $photo->save();
}

Je souhaite mettre mon image qui est dans le dossier temporaire spécifié dans le setDestination ("/home/jbunelcr/www/public/photos/tmp") dans le dossier "/home/jbunelcr/www/public/photos/archives" tout en la renommant avec $nomVisuel au lieu qu'elle prenne le même nom que celle de l'image d'origine qui sur le PC du client.

J'espére que je suis plus clair.
;-)

Hors ligne

 

#4 19-04-2009 20:46:27

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [ZF 1.7] Renommer une image après upload

jbunel a écrit:

En fait j'upload mon image dans un dossier temporaire ("/home/jbunelcr/www/public/photos/tmp") :

Code:

// Champ upload "nomFichier"
$nomFichier = new Zend_Form_Element_File("nomFichier");
$nomFichier->setLabel("Fichier");
$nomFichier->setRequired(true);
$nomFichier->setDestination("/home/jbunelcr/www/public/photos/tmp");
$nomFichier->setMaxFileSize(102400);
$nomFichier->setDecorators(array('Composite'));
$this->addElement($nomFichier);

Ensuite dans mon controller, je créé un row vide ($this->_photoTable est un objet Zend_Db_Table)

Code:

// Création d'un upplet vide
$photo = $this->_photoTable->createRow();

Ensuite

Code:

// Création du formulaire et déclaration des paramètres généraux
$form = new My_Form_Photo();
$form
->setAction($this->view->link('photo', 'edit', null, '', 'default', !$isUpdated))
->setMethod("post")
->setEnctype(Zend_Form::ENCTYPE_MULTIPART)
->setDefaults($photo->toArray());
       
if($this->getRequest()->isPost() && $form->isValid($_POST))
{
    // Retrait des informations depuis les données en post
    // et ajout dans le modèle
    $values = $form->getValues();
    $photo->setFromArray(array_intersect_key($values, $photo->toArray()));
   
    $constantes = Zend_Registry::get("constantes");
    $location = $form->nomFichier->getFileName();
    $mimeType = $form->nomFichier->getTypeMime();

    // Je fais une première sauvegarde des premières informations
    $photo->save();
   
    // Je récupère le dernière identifiant 
    $lastId = $this->_photoTable->getAdapter()->lastInsertId();
           
    // Traitement du fichier uploadé dans le fichier temp
    $visuel = My_ImageFactory::factory($location);
    $nomVisuel = $lastId.$visuel->makeExtension();
   
    //Création d'une image miniature a partir du dossier temporaire
    $visuel->redimensionner($constantes["largeur_mini"], $constantes["rep_photo_mini"].$nomVisuel);
   
    //Création d'une image intermédiaire a partir du dossier temporaire
    $visuel->redimensionner($constantes["largeur_web"], $constantes["rep_photo_web"].$nomVisuel);
    
    //A partir de là je souhaite mettre mon image qui est dans le dossier temporaire spécifié dans le setDestination ("/home/jbunelcr/www/public/photos/tmp") dans le dossier "/home/jbunelcr/www/public/photos/archives" tout en la renommant avec $nomVisuel au lieu qu'elle prenne le meme nom que celle de l'image d'origine qui sur le PC du client.

    $dest = $constantes["rep_photo_archive"].$nomVisuel;

    // Correspond à la colonne nomFichier de la table photo
    $photo->nomFichier = $nomVisuel;
   // Correspond à la colonne typeMime de la table photo
    $photo->typeMime = $mimeType;
           
    // Redirection vers la liste des familles
    //$this->_redirect("/lister-les-photos-page-1");
    // Sauvegarde des données
    $photo->save();
}

Je souhaite mettre mon image qui est dans le dossier temporaire spécifié dans le setDestination ("/home/jbunelcr/www/public/photos/tmp") dans le dossier "/home/jbunelcr/www/public/photos/archives" tout en la renommant avec $nomVisuel au lieu qu'elle prenne le même nom que celle de l'image d'origine qui sur le PC du client.

J'espére que je suis plus clair.
;-)

c'est bien ce que je dis pourquoi tu ne lui donne pas tout simplement le nom que tu  veux

Code:

$photo->nomFichier = $dest;

j'avoue franchement ne pas voir où il y a un problème.

A+JYT

Hors ligne

 

#5 19-04-2009 21:09:10

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

$photo est un objet row. Le fait de faire "$photo->nomFichier = $dest;" correspond à écrire dans la base, le nom complet du fichier avec le path dans la colonne "nomFichier" qui serait "/home/jbunelcr/www/public/photos/archves/nom.de.la.photo"
Alors que le fichier lui est toujours dans le dossier "/home/jbunelcr/www/public/photos/temp".

Désolé j'ai un peu de mal à me faire comprendre.
Cordialement

Julien

Hors ligne

 

#6 20-04-2009 10:25:43

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [ZF 1.7] Renommer une image après upload

où écris tu ton fichier à quelle instruction ???
c'est la que tu fixe le nom du fichier

Hors ligne

 

#7 20-04-2009 11:19:53

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [ZF 1.7] Renommer une image après upload

Hello,

Je ne vois aucun appel à la méthode receive() donc ton fichier ne doit pas être à l'endroit prévu ensuite tu as peut-être le filtre Rename qui peut t'aider (je dis bien peut-être wink )

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#8 20-04-2009 15:38:05

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

Bonjour,
C'est l'instruction ci dessous (qui se trouve dans ma classe de formulaire) qui envoi mon fichier dans le dossier temporaire mais à aucun moment je ne décide du nom du fichier.

Code:

$nomFichier->setDestination("/home/jbunelcr/www/public/photos/tmp");

Je récupére la valeur de l'auto-increment une fois le fichier uploadé. Je souhaite nommé le fichier avec cette valeur.
Pour le filtre 'rename', je ne sais pas comment l'utiliser dans mon controller. Je ne sais d'ailleurs pas si je peux !

J'espère que je suis plus clair...

Julien

Hors ligne

 

#9 20-04-2009 16:28:35

Stormfaint
Nouveau membre
Date d'inscription: 20-04-2009
Messages: 9

Re: [ZF 1.7] Renommer une image après upload

Bonjour,

J'suis en pleine création d'une classe d'upload de fichiers. J'ai réussi à renommer le fichier avec le nom que je souhaite, en passant comme proposé ci-dessus par le filtre rename.

Code:

$this->adapter = new Zend_File_Transfer_Adapter_Http();
...
$rootPath = substr($_SERVER['SCRIPT_FILENAME'],0,strrpos($_SERVER['SCRIPT_FILENAME'],'/admin/')).$this->directory.'/';
...
$newNameSave = time().'_'.$this->clean($file['name']);
$this->adapter->addFilter('Rename', $rootPath.$newNameSave);
...
if (!$this->adapter->isValid($file)) {}
        
try{
    $this->adapter->receive($file);
} catch (Zend_File_Transfer_Exception $e) {}

Je ne mets pas de validateurs ou de filtres via Zend Form car je gère tout dans ma classe (je configure juste un .ini). Donc en gros je fais appel à ce code juste après ma validation de mon formulaire :

Code:

if ($form->isValid($formDatas)) {
//traitement upload avec ma classe
}

Voilà en gros, je ne sais pas si ça va t'aider.

Hors ligne

 

#10 20-04-2009 16:54:14

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [ZF 1.7] Renommer une image après upload

Hello,

Cette instruction dit juste où allez mais ne fait aucun travail. Regardes bien l'exemple : http://framework.zend.com/manual/en/zen … ments.file :
"After the form is validated successfully, you must receive the file to store it in the final destination using receive(). Additionally you can determinate the final location using getFileName()"

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#11 20-04-2009 17:30:23

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

Je ne peux pas changer le nom du fichier, ni l'endroit où le fichier doit aller au final. La méthode getFileName() permet de connaitre l'endroit final où sera stocké le fichier mais pas de le déterminer.

Je n'arrive vraiment pas à utiliser le filtre Rename dans le controller. Comment puis-je attribuer le filtre 'rename' sur mon Zend_Form_Element_File a partir du controller ?

Julien

Dernière modification par jbunel (20-04-2009 17:52:56)

Hors ligne

 

#12 21-04-2009 00:52:28

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

J'ai essayé d'autre façon de faire mon upload mais rien à faire.

Code:

// Récupération de l'auto-increment
$lastId = $this->_photoTable->getAdapter()->lastInsertId();
            
////////////////////////////////////////////////////////////
////////////////
//////////////// NOUVEAU TRAITEMENT
////////////////
////////////////////////////////////////////////////////////
foreach ($form->nomFichier->getFileInfo() as $info)
{
    $name = $info['name'];
    $ext = $this->_findexts($info['name']);
    $fileName = $lastId.".".$ext;
    $tmpName = $info['tmp_name'];
}
            
            
$form->nomFichier->addFilter('Rename',
array('source' => '/home/jbunelcr/www/public/photos/tmp/'.$tmpName,
'target' => '/home/jbunelcr/www/public/photos/archives/'.$fileName,
'overwrite' => true));
              
$form->nomFichier->receive();

J'ai vraiment besoin d'aide !!!
Un coup de main serait vraiment le bienvenu...
Julien

Hors ligne

 

#13 21-04-2009 09:01:51

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [ZF 1.7] Renommer une image après upload

Salut,

Si tu créées ton champ ainsi :

Code:

        $form->addElement('file', 'tree', array(
            'label'            =>    'Tree XML',
            'required'        =>    true,
            'destination'    =>    'C:\...',
            'description'    =>    'File description',
            'validators'    =>
                array(
                    'Count'        =>    array(false, 1),
                    'Size'        =>    array(false, 102400),
                    'Extension' =>    array(false,'xml')
                )
        ));

Et que tu les récupéres comme ça dans ton contrôleur :

Code:

    public function indexAction()
    {
        
        
        $form = $model->getForm();
        
        if ( $this->getRequest()->isPost() ) {
            if ( $form->isValid($_POST) ) {
                $form->getElement('tree')->receive();
                return;
            }
        }
        
        $this->view->assign('form', $form);
        
        return;
        
    }

Le fichier sera bien téléchargé dans le répertoire spécifié par le paramètre "destination" du champ nouvellement créé wink

Hors ligne

 

#14 21-04-2009 09:26:04

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

En fait le problème n'est pas de l'uploadé dans le bon dossier, c'est un problème de nom de fichier.
Je souhaite récupérer l'extension du fichier et ensuite le renommer avec l'auto-increment que je récupére ($lastId).
Chose que je n'arrive pas à faire.

Encore un dernier coup de main pour ça svp...

Hors ligne

 

#15 21-04-2009 12:41:26

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

Personne n'a une idée ? Comment puis procéder pour renommer ??
Le code ci dessous ne fonctionne pas :

Code:

// Récupération de l'auto-increment
$lastId = $this->_photoTable->getAdapter()->lastInsertId();
            
////////////////////////////////////////////////////////////
////////////////
//////////////// NOUVEAU TRAITEMENT
////////////////
////////////////////////////////////////////////////////////
foreach ($form->nomFichier->getFileInfo() as $info)
{
    $name = $info['name'];
    $ext = $this->_findexts($info['name']);
    $fileName = $lastId.".".$ext;
    $tmpName = $info['tmp_name'];
}
            
            
$form->nomFichier->addFilter('Rename',
array('source' => '/home/jbunelcr/www/public/photos/tmp/'.$tmpName,
'target' => '/home/jbunelcr/www/public/photos/archives/'.$fileName,
'overwrite' => true));
              
$form->nomFichier->receive();

Hors ligne

 

#16 21-04-2009 14:42:26

Stormfaint
Nouveau membre
Date d'inscription: 20-04-2009
Messages: 9

Re: [ZF 1.7] Renommer une image après upload

Essaye ça, chez moi j'ai réussi à le faire fonctionner comme ceci :

Code:

// Récupération de l'auto-increment
$adapter = new Zend_File_Transfer_Adapter_Http();
foreach ($adapter->getFileInfo() as $file => $info)
{
    $name = $info['name'];
    $ext = $this->_findexts($info['name']);
    $fileName = $lastId.".".$ext;
    $tmpName = $info['tmp_name'];
    $adapter->addFilter('Rename',
    array('source' => '/home/jbunelcr/www/public/photos/tmp/'.$tmpName,
    'target' => '/home/jbunelcr/www/public/photos/archives/'.$fileName,
     overwrite' => true));
              
     $adapter->receive($file);
}

Dernière modification par Stormfaint (21-04-2009 14:44:17)

Hors ligne

 

#17 21-04-2009 17:38:09

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

Le code suivant ne fonctionne pas chez moi.

Code:

// Récupération de l'auto-increment
$adapter = new Zend_File_Transfer_Adapter_Http();
foreach ($adapter->getFileInfo() as $file => $info)
{
    $name = $info['name'];
    $ext = $this->_findexts($info['name']);
    $fileName = $lastId.".".$ext;
    $tmpName = $info['tmp_name'];
    $adapter->addFilter('Rename',
    array('source' => '/home/jbunelcr/www/public/photos/tmp/'.$tmpName,
    'target' => '/home/jbunelcr/www/public/photos/archives/'.$fileName,
     overwrite' => true));
              
     $adapter->receive($file);
}

Je ne sais pas de quoi cela peut venir.
Si quelqu'un à une idée...

Hors ligne

 

#18 21-04-2009 23:34:57

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

Bonjour,
Il y a une chose que je ne comprends pas.
Il m'est impossible d'ajouter un filtre à mon Zend_Element_File du côté de mon controller.

Lorsque je fais (class My_Form_Photo extends Zend_Form) :

Code:

// Champ upload "nomFichier"
$nomFichier = new Zend_Form_Element_File("nomFichier");
$nomFichier->setLabel("Fichier");
$nomFichier->setRequired(true);
$nomFichier->setDestination("/home/jbunelcr/www/public/photos/archives");
$nomFichier->setMaxFileSize(102400);
$nomFichier->setDecorators(array('Composite'));
$nomFichier->addFilter('Rename',
    array(
    'target' => '/home/jbunelcr/www/public/photos/archives/'.$nextId,
     'overwrite' => true));
$this->addElement($nomFichier);

Masi que je fais ce code ci dessous dans mon controlleur ne marche pas :

Code:

$form->nomFichier->addFilter('Rename',
    array(
    'target' => '/home/jbunelcr/www/public/photos/archives/'.$nextId,
     'overwrite' => true));
$this->addElement($nomFichier);

Encore un peu d'aide et ça devrait être bon....

Hors ligne

 

#19 21-04-2009 23:50:40

jbunel
Membre
Lieu: Paris
Date d'inscription: 25-06-2008
Messages: 89
Site web

Re: [ZF 1.7] Renommer une image après upload

Je reviens sur ce que j'ai dis dans le post d'avant. L'ajout de filtre peut se faire dans le controlleur.
Par contre j'ai une dernière question comment peut-on faire pour attribuer l'extension au nouveau nom dans le fitre 'rename' alors que tant que le fichier n'est pas reçu on ne peux pas connaitre son extension ?

Hors ligne

 

#20 22-04-2009 12:10:13

Stormfaint
Nouveau membre
Date d'inscription: 20-04-2009
Messages: 9

Re: [ZF 1.7] Renommer une image après upload

Via $info['type'] dans ton exemple, où tu récupères le MimeType (ne pas faire via le nom ($info['name']), car cela peut être erroné).

Sinon as tu des messages d'erreurs ou exécution normale mais tu ne retrouves simplement pas ton fichier sur le serveur ?

Il faut bien que ton dossier de destination soit disponible en écriture :

Code:

is_writable($root)

Hors ligne

 

#21 07-08-2009 16:17:22

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [ZF 1.7] Renommer une image après upload

Salut, moi j'aimerais avoir une aperçu de ta fonction qui permet de redimensionner tes images et de la duppliquer lors de l'upload, en fait, un image resizer lors de l'upload des fichiers

Hors ligne

 

#22 07-08-2009 17:41:51

dev-k
Membre
Lieu: Barcelona
Date d'inscription: 18-07-2009
Messages: 77
Site web

Re: [ZF 1.7] Renommer une image après upload

Salut,

j'ai fait un truc du genre aussi où je m'étais bien cassé les dents mais là ça marche.

Dans mon form

Code:

$file = new Zend_Form_Element_File('photo');
$file->setLabel("Image :");
$file->addValidator('Size', false, 1024000);
$file->addValidator('Count', false, 1);
$file->setMaxFileSize(1024000);
$file->setValueDisabled(true);
$file->setDecorators($this->_fileDecorators);

Dans le controlleur

Code:

        $membre = $this->_membreTable->createRow();
        $form = new App_Form_Membre();
        $url = $this->view->url(
            array(
                'controller' => 'index', 
                'action' => 'edit',
                'module' => 'default'
            ), null);
        
        $form->setAction($url);
        $form->setMethod('post');
        $form->setDefaults($membre->toArray());
        
        if ($this->getRequest()->isPost() && $form->isValid($_POST)) {
            $adapterImgUrl = $form->photo->getTransferAdapter();
                
            //UPLOAD ET REDIMENSIONNEMENT
            foreach($adapterImgUrl->getFileInfo() as $file=>$info)
            {
                if ($info['name']) {    
                    $name = $info['name'];
                    //$name = $adapterImgUrl->getFileName('image');
                    $ext = substr(strrchr($name,'.'),1);
                    $fileName = Zend_Date::now()->toString('ddMMyyyy_HHmmss') . '.' . $ext;
                    $tmpName = $info['tmp_name'];
                    $path = 'le/chemin/de/destination/de/ta/photo';
    
                    $filterFileName = new Zend_Filter_File_Rename(array(
                                            'target'=>$path . $fileName,
                                            'overwrite'=>true));
    
                    $adapterImgUrl->addFilters(array($filterFileName));
                    
                    try {
                        // upload received file(s)
                        $adapterImgUrl->receive();
                    } catch (Zend_File_Transfer_Exception $e) {
                        $e->getMessage();
                    }
                    //redimensionnement
                    $this->_helper->thumb($path . $fileName, 150, 150);
                }
            }
            
            
        }
        
       .....

Si ça peut t'aider

Hors ligne

 

#23 14-08-2009 12:16:20

mymind
Membre
Date d'inscription: 15-07-2009
Messages: 24

Re: [ZF 1.7] Renommer une image après upload

jbunel a écrit:

Je reviens sur ce que j'ai dis dans le post d'avant. L'ajout de filtre peut se faire dans le controlleur.
Par contre j'ai une dernière question comment peut-on faire pour attribuer l'extension au nouveau nom dans le fitre 'rename' alors que tant que le fichier n'est pas reçu on ne peux pas connaitre son extension ?

si cela pourrait t'aider

Code:

if ($this->_request->isPost()) {

            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {

                /* Uploading Document File on Server */
                $upload = new Zend_File_Transfer_Adapter_Http();
                $upload->setDestination('images/products_large/');
                
                /* New name and path of the file uploaded*/
                 $renameFile = $prod_id.'.jpg';
                 $fullFilePath = 'images/products_large/'.$renameFile;
                /* Rename uploaded file using Zend Framework */
                 $upload->addFilter('Rename', array('target'=>$fullFilePath, 'overwrite'=>true));
            

                try {
                    // upload received file(s)
                    $upload->receive();
                } catch (Zend_File_Transfer_Exception $e) {
                    $e->getMessage();
                }
...

il faut avant cela que tu récupères dans $prod_id le dernier produit ajouté

Hors ligne

 

#24 14-08-2009 14:50:39

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: [ZF 1.7] Renommer une image après upload

Voici comment un bout de mon code

Code:

    
        
        if ($this->_request->isPost()) {
            $formdata=$this->_request->getPost();
                
            if ($form->isValid($formdata)){
                
                                //Réservation d'un nouvel enregistrement temporaire dans la table Documents
                //à partir du Type de Document

                $form->fichier->receive();
//$oldname, $extension  contient le nom et l'ext. du fichier temporaire

                $oldname=$form->fichier->getFileName(null,true);
                $extension = strrchr($oldname, '.');
//je récupère l'ID de l'utilsateur pour le stocker dans la bd

                $auth = Zend_Auth::getInstance();
// Je remplis un tableau $data avec les données de mon enregistrements

                $data = array('doctype'=>$formdata['doctype'],
                             'description'=>$formdata['description'],
                             'ext'=>$extension,
                             'user_id'=>$auth->getIdentity()->user_id,
                             'indice'=>$formdata['indice'],
                            'doc_ref'=>$formdata['doc_ref']);

// Je rentre les données dans la base, 5données temporaires                    
                $tempdoc = new mDocuments();
                $tempdocdata=$tempdoc->nvTempDoc($data);

// si l'enregistrement temporaire n'est pas crée dans ma base, j'efface le fichier temporaire
                if ($tempdocdata==null) {
                    unlink($oldname);
                    $this->_forward('code','error','default',array('n'=>1600));
                }else {

// si l'enregistrement temporaire est crée dans ma base, je récupère l'ID du fichier                     
                    if ($formdata['indice']!='') {
                        $ind='-'.$formdata['indice'];
                    }
$rootdir est le chemin de mon appli
                    $rootdir = Zend_Registry::get('rootdir');

//$newname est le nouveau nom du fichier avec le chemein complet rootdir\upload\nouveau nom
// Le nouveau nom est généré à partir des données de l'enregistrement temporaire de la base ID+Indice+Extension

                    $newname=$rootdir.'\upload\\'.'\\'.$tempdocdata->id.$ind.$extension;
                    try {
//renommer le fichier

                        rename($oldname,$newname);
//maj de la bd
                        $tempdoc->updateTempDoc($tempdocdata->id);
                        //Changer Redirection vers liste des documents du type DocType
                        $this->_redirect('/documents/consultation/categories');

                    }catch (Exception $e)
                    {
                        try {
                            $tempdoc->deleteTempDoc($tempdocdata->id);
                            unlink($newname);
                            unlink($oldname);
                        }
                        catch (Exception $e){
                            ;
                        }
                            
                        $this->_forward('code','error','default',array('n'=>1601));

                    }
                }
                    

            }else {
                $this->view->message='Veuillez vérifier les données que vous avez fournies.';
                $form->populate($formdata);
            }
                
        }

        $this->view->form=$form;

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages