Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
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 08/06/2011, 15h14   #1
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Par défaut Renommer un fichier uploader

Bonjour,
J'ai développé un formulaire d'ajout de candidature , et je fais l'upload de fichier, la fonction d'ajout marche très bien sauf que je veux renommer le fichier lors du téléchargement pour éviter d'avoir des problèmes lorsque deux fichiers du même nom seront uploader.
me fonction d'ajout est la suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
public function ajoutCandidatureAction(){
 
   		$candidature					=  new RecrutementCandidature();
   		$offres 						=  new RecrutementOffre();
		$offresText 					=  new RecrutementOffreText();
	   	$translations           		=  new thermidorTranslation();
	   	$languages						=  new ThermidorLanguage();
	   	$defaultLanguage				=  $languages->getDefaultLanguage();
	   	$language						=  (isset($this->params['lang']) && $this->params['lang'] != '') ? $this->params['lang'] : $defaultLanguage;
   		$listOffres						=  $offresText->getListOffresDisponibles(1,$language);
   		$url							= "{$this->params['module']}/index/ajout-candidature/lang/{$this->params['lang']}";
		//Gestion des enregistrements de la table recrutement_candidature
		$tcandidature							= array();
		$tcandidature["candidatId"]				= $this->params["candidatId"];
		$tcandidature["offreId"]				= $this->params["offreId"];
		$tcandidature["langCode"]				= $this->params["lang"];
		$tcandidature["candidatNom"]			= $this->params["candidatNom"];
		$tcandidature["candidatPrenom"]			= $this->params["candidatPrenom"];
		$tcandidature["candidatEmail"]			= $this->params["candidatEmail"];
		$tcandidature["candidatAdresse"]		= $this->params["candidatAdresse"];
		$tcandidature["candidatCv"]				= $this->params["candidatCv"];
		$tcandidature["candidatLm"]				= $this->params["candidatLm"];
		$tcandidature["candidatDate"]			= date("Y-m-d H:i:s");
		// Upload de fichier
		$adapter 								=  new Zend_File_Transfer();
		$adapter->setDestination('D:\workspace\thermidor\public\upload');
		$candidatCv                    		    = $adapter->getFileInfo(); 
		$filePath = $adapter->getFileName();
		$fileName = NULL;
		if($filePath) {
			$fileName = basename($filePath);	
		}
		//echo $mime = $adapter->getMimeType()."<br>";
		//echo $size = $adapter->getFileSize();
		//Création des candidatures
 
		if($this->params["candidatId"] == ""){
			if ($adapter->isUploaded()) {
			 	$adapter->receive();
				$tcandidature["candidatId"]		= NULL;      
				$tcandidature["candidatCv"]		= PUBLIC_UPLOAD.$fileName;
				if (!$fileName) {		
				    $messages = $adapter->getMessages();
				    echo implode("\n", $messages);
				    $result = false;
				}else{
					$candidature->insert($tcandidature);
					$result = true;
				}		
			$url .= $result ? "/op/succes" : "/op/erreur" ;
			$this->gotoUrl($url);
			}
		}
Merci d'avance pour votre aide.
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 15h17   #2
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
En fait j'ai oublié de préciser que j'aimerai que le fichier puisse être renommer de la manière suivante:

▪ « CV » + horodatage + identifiant de l'offre + extention du fichier d'origine
exemple: cv_20110601105512_12.ext
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 15h47   #3
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Après une recherche sur google, j'ai vu que c'était possible de le faire en utilisant les filtres sous zend donc avec le filtre "Rename" par contre je ne vois pas comment l'utiliser, j'ai trouvé un bout de code qui est le suivant:
Code :
1
2
3
4
5
6
7
8
9
 
$upload = new Zend_File_Transfer();
 
// Paramètre un dossier de destination
$upload->addFilter('Rename', 'C:\image\uploads');
 
// Paramètre un nouveau dossier de destination
// et surcharge pour les fichiers existants
$upload->addFilter('Rename', array('target' => 'C:\picture\uploads', 'overwrite' => true));
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 09h51   #4
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Bonjour,
Je suis toujours à la recherche d'une solution pour renommer les fichiers donc du coup j'ai trouvé un filtre qui me parait logique sauf que je n'arrive pas à récupérer l'extension du fichier.
j'aimerai savoir s'il existe une librairie sous zend qui permet de récupérer l'extension des fichiers,
en fait ce que je veux faire c'est utiliser le filtre suivant:
Code :
1
2
3
 
$extension = $adapter->getExtension($filePath);
$adapter->addFilter('Rename', 'cv_horodatage_offreId.$extension', $filePath);
la methode getExtension n'existe pas donc du coup je n'arrive pas à récupérer l'extension.
le filepath c'est le non du fichier qui est télécharger.
merci d'avance pour votre aide.
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 11h12   #5
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
RE,
en fait je viens de trouver un moyen de renommer les fichiers téléchargés:
de la manière suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
if($this->params["candidatId"] == ""){
			if ($adapter->isUploaded()) {
				//recupérer l'extension du fichier pour pouvoir le renommer
				$extension = end(explode('.', $fileName));
				$date = date("Ymd-his");
				// utilisation du validateur Rename pour pouvoir renommer le fichier
				$adapter->addFilter('Rename', "cv.{$date}.{$extension}", $fileName);
			 	$adapter->receive();
				$tcandidature["candidatId"]		= NULL;      
				$tcandidature["candidatCv"]		= PUBLIC_UPLOAD.$fileName;
				if (!$fileName) {		
				    $messages = $adapter->getMessages();
				    echo implode("\n", $messages);
				    $result = false;
				}else{
					$candidature->insert($tcandidature);
					$result = true;
				}
sauf que lors de l'ajout, le chemin qui est enregistré dans la base de donnée n'ai pas celui qui est renommer, je n'ai pas trouver le moyen de donner le bon non dans:
Code :
1
2
 
$tcandidature["candidatCv"]		= PUBLIC_UPLOAD.$fileName;
lorsque je mets une variable qui récupère le non du fichier , un message d'erreur s'affiche me disant qu'on ne peut pas remplacer un string par un objet , ce que je comprends parfaitement.
donc du coup si quelqu'un peut bien m'aider à envoyer le bon nom du fichier
merci d'avance
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 15h03   #6
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Et finalement, j'ai trouvé la solution,
j'aurai juste du tout simplement récupérer le nom qui a été renommé.
donc du coup la solution est comme suit : elle marche tres bien:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
// Upload de fichier
		$adapter 								=  new Zend_File_Transfer();
		$adapter->setDestination('D:\workspace\thermidor\public\upload');
		$filePath = $adapter->getFileName();
		$fileName = NULL;
		if($filePath) {
			$fileName = basename($filePath);
		}
		//echo $mime = $adapter->getMimeType()."<br>";
		//echo $size = $adapter->getFileSize();
		//Création des candidatures
 
		if($this->params["candidatId"] == ""){
			if ($adapter->isUploaded()) { 
				//recupérer l'extension du fichier pour pouvoir le renommer
				$extension = end(explode('.', $fileName));
				$date = date("Ymdhis");
				// utilisation du validateur Rename pour pouvoir renommer le fichier
				$targetName = "cv_{$date}_{$this->params["offreId"]}.{$extension}";
				$adapter->addFilter('Rename',$targetName,$fileName);
			 	$adapter->receive();
				$tcandidature["candidatId"]		= NULL;      
				$tcandidature["candidatCv"]		= PUBLIC_UPLOAD.$targetName;
				if (!$fileName) {		
				    $messages = $adapter->getMessages();
				    echo implode("\n", $messages);
				    $result = false;
				}else{
					$candidature->insert($tcandidature);
					$result = true;
 
				}		
			$url .= $result ? "/op/succes" : "/op/erreur" ;
			$this->gotoUrl($url);
			}
		}
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h57.


 
 
 
 
Partenaires

Hébergement Web