Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2011, 15h06   #1
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
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 :
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 !
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 12h34   #2
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
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 :
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.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 14h17   #3
Membre confirmé
 
Inscription : février 2009
Messages : 317
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 317
Points : 209
Points : 209
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 :
1
2
3
generateNomduchampFilename($file) {
return $file->getOriginalName();
}
Ou $file est un objet de type sfValidatedFile.

Plus d'infos ici ou la
insane1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 15h14   #4
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
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)
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h44.


 
 
 
 
Partenaires

Hébergement Web