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

 PHP Discussion :

Récupérer le nom original d'un fichier pour le stocker dans un champ de la table


Sujet :

PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut Récupérer le nom original d'un fichier pour le stocker dans un champ de la table
    Bonjour,

    En train de réaliser un petit dépôt de fichier, je souhaite récupérer le nom original d'un fichier uploadé, le stocker dans la table pour pouvoir le réafficher plus tard, plutôt que le nom de fichier inhumain généré par php.

    J'ai lu ceci de Michel Rotta dans ce forum :
    En fait, pour les fichiers, le widget ne fait qu'afficher la demande et c'est le validateur sfValidatorFile qui fait la partie récupération (et par là j'entends récupérer sur le serveur le fichier) du fichier. De ce sfValidatorFile on peut récupérer une instance sur un objet de la classe sfValidatedFile qui est l'objet qui "contiens" le fichier récupéré (après importation sur le serveur) et toutes ces propriété. Miracle, nous avons enfin une méthode getOriginalName() qui nous tends les bras.
    J'ai bien trouvé cette histoire de sfValidatedFile dans la doc de l'API. Je crois que c'est exactement ce qu'il me faut. Mais comment récupérer un objet retourné par la méthode doClean() dans l'action processForm ?

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Tu as dans le jour 10 du tutoriel de symfony tout ce qui devrait t'être nécessaire

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    J'ai lu et relu ce chapitre et en effet il explique comment faire pour remplacer le nom généré automatiquement par quelque chose d'autre. Ca pourrait peut-être me convenir.
    Mais à moins d'avoir mal lu, cela n'explique pas comment accéder à l'objet sfValidatedFile retourné. Y aurait-il quelque chose à voir avec le getFiles que l'on voit dans l'action processForm ?
    Merci

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Ok, je pense que c'est bon.

    Un petit print_r me donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print_r($request->getFiles($form->getName()));
     
    ** Réponse **
    Array ( [url] => Array ( [error] => 0 [name] => heures.ods [type] => application/vnd.oasis.opendocument.spreadsheet [tmp_name] => /tmp/phpR7UzpQ [size] => 13330 ) )
    A partir de là j'ai ce qu'il me faut !

    Merci!

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Voici donc le code final qui fonctionne :

    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
    protected function processForm(sfWebRequest $request, sfForm $form)
      {
        $form->bind(
                $request->getParameter($form->getName()),
                $request->getFiles($form->getName())
        );
        if ($form->isValid())
        {
            $fileArray = $request->getFiles($form->getName());
            $fileInfo = $fileArray['url'];
            $originalFilename = $fileInfo['name'];
            $dtFileRecord = $form->getObject();
            $dtFileRecord->setNom($originalFilename);
            $dt_file = $form->save();
     
            $this->redirect('fileupload/edit?id='.$dt_file->getId());
        }
      }
    La méthode vous semble-t-elle bonne ?

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Un petit fix en cas de modification où on ne changerait pas le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!empty($originalFilename)) $dtFileRecord->setNom($originalFilename);

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Merci pour ces explications qui viennent enrichir notre fond de solutions.

    N'oublies pas le

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Pas encore le résolu, car je suis en train de voir comment renommer le fichier avec son nom original avant download par un utilisateur.

    Je cherche donc à faire l'équivalent de ça dans une action downloadSuccess par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php header("Content-Disposition: attachment; filename=".$new_name); ?>
    J'hésite entre utiliser :
    • setHttpHeader ($name, $value, $replace)
    • addHttpMeta ($key, $value, $replace)
    • addMeta ($key, $value, $replace, $escape)

    de l'objet sfWebResponse.

    Et puis comment transcrire Content-Disposition: attachment; filename=".$new_name entre les args $key, $value, etc...

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Bon, je n'ai pas trouvé mieux que ça. Ce n'est pas vraiment ce que je voulais faire, mais ça fera quand même l'affaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function generateUrlFilename(sfValidatedFile $file)
        {
            $fullname = $file->getOriginalName();
            $name = substr( $fullname, 0, strrpos( $fullname, $file->getOriginalExtension() ));
            $rand = rand(0,  getrandmax());
            $name .= '_'.$rand.$file->getOriginalExtension();
            return $name;
        }
    Si quelqu'un a une meilleure idée, je suis preneur !

    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/01/2015, 17h02
  2. Réponses: 0
    Dernier message: 02/04/2011, 12h57
  3. Récupérer le nom du dossier du fichier courant
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/06/2008, 12h40
  4. Réponses: 2
    Dernier message: 23/04/2008, 11h35
  5. Réponses: 4
    Dernier message: 04/12/2007, 13h31

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