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

Symfony PHP Discussion :

Création et nommage des dossiers à la volée lors d'un upload file


Sujet :

Symfony PHP

  1. #1
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut Création et nommage des dossiers à la volée lors d'un upload file
    Bonjour,

    Je cherche à créer des dossiers au moment d'un upload et les nommer en fonction du nom que j'attribue au fichier en question.

    Voilà ce que j'ai à l'heure actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $this->widgetSchema['image_url'] = new sfWidgetFormInputFileEditable(array(
    	'label' => 'Product picture',
    	'file_src' => '/uploads/pictures/'.$this->getObject()->getImageUrl(),
    	'is_image' => true,
    	'edit_mode' => !$this->isNew(),
    	'template' => '<div class="sublabel">%file%<br />%input%<br />%delete% %delete_label%</div>',
    ));
     
    $this->validatorSchema['image_url'] = new sfValidatorFile(array(
    	'required'   => false,
    	'path'       => sfConfig::get('sf_upload_dir').'/pictures',
    	'mime_types' => 'web_images',
    ));
    Pour le moment mon fichier est uploadé et placé dans le répertoire upload/pictures avec un nom en md5.

    L'idée, pour ne pas avoir potentiellement 10000 ou 20000 images dans le même dossier serait de créer des dossiers à la volée dans lesquels placer ces images en fonction de leur nom en md5. Chaque dossier serait nommé avec les deux premiers caractères des fichiers dont le nom commence par ces caractères. Si je ne me trompe pas les md5 commencent toujours par un chiffre, raison pour laquelle je prend les deux premiers.

    Je cherche donc à avoir donc un répertoire 4c qui contiendra mon fichier 4c68368b7...etc un répertoire 23 pour tous les md5 commençant par 23 bref, vous avez saisi l'idée !

    Merci !

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Je bump un petit coup pour rajouter quelques éléments : j'ai tenté de créer le dossier à la volée de cette manière :

    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
    $file = $this->getObject()->getImageUrl();
    $dir = substr($file, 0, 2);
     
    $this->widgetSchema['image_url'] = new sfWidgetFormInputFileEditable(array(
    			'label' => 'Product picture',
    			'file_src' => '/uploads/pictures/'.$dir.'/'.$file,
    			'is_image' => true,
    			'edit_mode' => !$this->isNew(),
    			'template' => '<div class="sublabel">%file%<br />%input%<br />%delete% %delete_label%</div>',
    ));
     
    $this->validatorSchema['image_url'] = new sfValidatorFile(array(
    			'required'   => false,
    			'path'       => sfConfig::get('sf_upload_dir').'/pictures/'.$dir,
    			'mime_types' => 'web_images',
    ));
    Le problème est que j'ai toujours un coup de retard : je m'explique le résultat d'un premier upload sera la création d'un dossier commençant par 5c avec dedans un fichier commençant par 54, puis lors d'un deuxième upload (sur le même objet) je vais cette fois avoir le dossier 54 contenant un fichier commençant par c9, et si j'en refait un le répertoire sera c9 et l'image contenue encore différente.

    Je pense qu'il y a une méthode à surcharger ou à créer ... peut-etre dans l'action plutot que le form mais comme je ne connais pas l'ordre dans lequel toute cette purée est traitée je ne sais pas trop ou me placer.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Points : 265
    Points
    265
    Par défaut
    Bonjour,
    Quel est le but de la manœuvre ?
    Car si le nom md5 de ton image est générée par exemple comme un md5(microtime) alors voila pourquoi le nom change à chaque fois lorsque tu retouche à l'objet.
    Par contre, je crois qu'il est possible de garder le nom d'origine du fichier. Je vais rechercher rapidement comment car je ne m'en souviens plus...

    EDIT : Pour conserver le nom d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    generateNomduchampFilename($file) {
    return $file->getOriginalName();
    }
    Ou $file est un objet de type sfValidatedFile.

    Plus d'infos ici ou la

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Alors, correction il ne s'agit pas de md5, mais d'un code de 40 caractères allant de 0 à 9 et de A à F (du sha1 peut-être ?). Bref toujours est-il qu'en effet ce code est généré aléatoirement puisqu'il change à chaque upload. Mais c'est une bonne chose car moi je veux garder ce code incompréhensible.

    Le but de la manœuvre est : à partir d'un fichier de nom quelconque, pouvoir lors d'un upload générer son nom comme c'est déjà le cas, et stocker l'image dans un répertoire qui sera upload/pictures/#les_deux_premiers_caractères_de_ce_code#.

    Ensuite pour le récupérer rien de plus simple puisque ce code est stocké dans mon champs ImageUrl (qui n'est pas une url je vous l'accorde).

    La ou ça bloque pour le moment c'est lors de l'upload car les deux premiers caractères du fichier et du dossier diffèrent (cf. mon 2eme post)

Discussions similaires

  1. Création de tables de références "à la volée" lors d'un import
    Par gavelin dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 12/11/2009, 11h41
  2. Caractère d'echappement pour le nommage des dossiers d'un projet
    Par Immobilis dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 27/05/2008, 12h43
  3. Création des dossiers
    Par EricDou dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2008, 09h29
  4. Réponses: 2
    Dernier message: 05/11/2007, 14h23
  5. [VB.NET 2005] Inclure des dossiers lors de l'installation
    Par kissskoool dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/05/2006, 09h02

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