Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-04-2013 10:55:59

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Upload de fichier avec nom de fichier unique

Bonjour à tous,

Ci-dessous mon code pour l'upload d'un fichier :

Code:

[lang=php]
    public function getInputFilterSpecification()
    {
        return array(
            'documentFile' => array(
                'required' => false,
                'filters' => array(
                    array(
                        'name' => 'filerenameupload',
                        'options' => array(
                            'target' => './www/media/news/docs/',
                            'use_upload_name' => true,
                            'randomize' => true
                        )
                    )
                )
         )
    }

Donc là ça marche plutôt bien, j'utilise le code ci-dessous pour générer un nom de fichier unique :                   

Code:

[lang=php]
 'use_upload_name' => true,
 'randomize' => true

Le problème est que je n'arrive pas à récupérer proprement le nom de fichier généré  pour le stocker en base.
Je me demande du coup si je devrais pas le faire autrement ? Qu'en pensez-vous ?
Quel serait le best practice ?
Aussi dans quel dossier rangeriez-vous les fichiers uploadés par les users ? Pour ma part je les stocke dans le document root /media

Merci d'avance


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#2 12-04-2013 13:39:24

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: Upload de fichier avec nom de fichier unique

Hello,

Quand tu dis tu ne parviens pas à récupérer le nom du fichier généré proprement, comment fais tu actuellement ?

Aussi dans quel dossier rangeriez-vous les fichiers uploadés par les users ? Pour ma part je les stocke dans le document root /media

A toi de choisir smile Pour ma par j'ai un dossier data sur la root de mon application et dedans je met un dossier upload.
Après à toi de voir comment tu souhaites gérer ca...

Hors ligne

 

#3 12-04-2013 14:29:45

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Upload de fichier avec nom de fichier unique

YannickDa a écrit:

Quand tu dis tu ne parviens pas à récupérer le nom du fichier généré proprement, comment fais tu actuellement ?

Il faut regarder à la ligne 170 du fichier \Zend\Filter\File\RenameUpload, il stocke le resultat dans $return['tmp_name'] = $targetFile;
Donc il faut faire un getInputFilter() pour récupérer le bon filter et trouver le bon filtre, et encore il ne retourne pas le nom du fichier mais le chemin complet et le chemin ne me plait pas, il faut le retravailler, bref pas élégant je trouve. J'ai l'impression que c'est pas adapté à mes besoins cette méthode.

YannickDa a écrit:

A toi de choisir smile Pour ma par j'ai un dossier data sur la root de mon application et dedans je met un dossier upload.
Après à toi de voir comment tu souhaites gérer ca...

Mais le problème est que si je le stocke dans "data/upload", le fichier ne sera pas accessible au public non ?
Il faudra alors configurer apache dans ce cas ? Dans le cas d'un serveur en Mutu c'est pas trop possible


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#4 12-04-2013 14:36:47

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Upload de fichier avec nom de fichier unique

Salut, tu peux directement mettre les fichiers dans le dossier public de ton application. Tu fais un sous dossier pour le mettre dedans. Après à toi de faire en sorte que le répertoire ne puisse pas lister ses fichiers. Si les noms sont uniques faut être motivé pour trouver les fichiers wink.

Hors ligne

 

#5 12-04-2013 14:47:43

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Upload de fichier avec nom de fichier unique

Bonjour Orkin,

Je penses que tu parles d'autres choses là, ce n'est pas ce que je demandais.
Pour l'emplacement, je demandais juste comme ça, juste pour savoir ou avait la place des fichiers uploadé par les utilisateurs dans la structure de l'appli. Effectivement dans le dossier data/ ça me plait aussi mais je pense que là du coup faut jouer avec la conf d'apache.

Pour le nom unique, c'est lors de l'upload, si un utilisateur poste un fichier qui a un même nom de fichier déjà uploadé, ça posera problème forcement. Pas grave si les fichiers sont listés ou non pour l'instant.
Je cherche donc un moyen d'uploadé un fichier avec un nom unique avec ZF2, pouvoir récupérer ce nom pour le stocké en base.

Merci


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#6 12-04-2013 15:12:13

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Upload de fichier avec nom de fichier unique

Je viens de survoler rapidement la documentation sur le fileupload et visiblement tu ne peux récupérer les informations du fichier (nom etc ...) généré par les filtres et validateur qu'à partir de l'inputfilter.

Tu as des exemples d'utilisation assez complet par l'auteur du composant ici : https://github.com/cgmartin/ZF2FileUploadExamples

Hors ligne

 

#7 12-04-2013 15:38:17

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: Upload de fichier avec nom de fichier unique

alien7 a écrit:

YannickDa a écrit:

Quand tu dis tu ne parviens pas à récupérer le nom du fichier généré proprement, comment fais tu actuellement ?

Il faut regarder à la ligne 170 du fichier \Zend\Filter\File\RenameUpload, il stocke le resultat dans $return['tmp_name'] = $targetFile;
Donc il faut faire un getInputFilter() pour récupérer le bon filter et trouver le bon filtre, et encore il ne retourne pas le nom du fichier mais le chemin complet et le chemin ne me plait pas, il faut le retravailler, bref pas élégant je trouve. J'ai l'impression que c'est pas adapté à mes besoins cette méthode.

En faite tu peux faire quelque chose de bien plus simple. Une fois que tu as validé ton formulaire, tu récupère les valeurs grâce à la méthode getData() de ton form puis tu regarde dans ce retour le nom de ton champs d'upload et tu verra qu'il y a les infos de ton fichier uploadé...


alien7 a écrit:

YannickDa a écrit:

A toi de choisir smile Pour ma par j'ai un dossier data sur la root de mon application et dedans je met un dossier upload.
Après à toi de voir comment tu souhaites gérer ca...

Mais le problème est que si je le stocke dans "data/upload", le fichier ne sera pas accessible au public non ?
Il faudra alors configurer apache dans ce cas ? Dans le cas d'un serveur en Mutu c'est pas trop possible

En fait j'ai oublié de préciser un point : Tout dépend de tes besoins. Si ces fichiers sont destinés à être téléchargés uniquement par certaine personne (donc tu as besoins d'un contrôle sur l'utilisateur qui télécharge), tu peux te créer un controller qui va s'occuper de distribuer le fichier en allant le chercher dans le rep data. Sinon, si tu n'as pas besoin de cette mécanique, comme le dit Orkin, met le dans le dossier public tu t'embêtera bien moins... Ou si tu veux absolument le mettre dans le rep data, alors créer toi un controller qui va s'occuper de distribuer les fichiers...

Hors ligne

 

#8 12-04-2013 16:22:13

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Upload de fichier avec nom de fichier unique

Le problème est que $form->getData() me renvoit un object (J'utilise Doctrine) donc quand je fais un var_dump($form->getData()) firefox mouline du coup impossible de lire la variable trop d'information, donc je ne sais pas ou aller chercher l'info.

Je fais comme ceci :

Code:

[lang=php]
                $inputFilter = $form->getInputFilter();
                $filters = $inputFilter->getValues();

    // j'ai essayé comme ceci :

    $inputFilter = $form->getInputFilter();
    $filter = $inputFilter->getValue('documentFile');
    // mais ca ne marche pas, je ne sais pas pourquoi

Sinon j'obtiens ca:

Code:

  'name' => string 'home_screenshot.png' (length=19)
  'type' => string 'image/png' (length=9)
  'tmp_name' => string './www/media/news/docs/home_screenshot_51681532ee396.png' (length=59)
  'error' => int 0
  'size' => int 677961

Ensuite je dois faire un basename pour récupérer le nom du fichier. C'est pas jolie.

Je vais continuer comme ça pour le moment.

Merci à tous


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#9 12-04-2013 16:47:42

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: Upload de fichier avec nom de fichier unique

Et l'objet que te retourne le getData, il contient pas le champs du fichier uploadé ?

Il n'y a pas de propriété "documentFile" ? Si c'est le cas, si tu fait un get sur cette propriété il te retourne quoi ?

S'il y en a pas, tu as toujours la possibilité de retrouver les valeurs filtrés par Zend en envoyant le flag \Zend\Form\FormInterface::VALUES_AS_ARRAY à la méthode getData....

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