Bonjour a tous,
Je suis dans un projet CakePHP et j'utilise Plupload pour uploader des images. En effet, un utilisateur a le droit d'uploader une image qui lui servira d'avatar j'ai donc mis en place un système de drag&drop.
Je souhaite récupérer la photo uploadé par l'utilisateur dans un premier temps sans l'uploader dans ma bdd suite à ca je souhaite que l'utilisateur la crop dans un format carré puis valide le formulaire avec toutes les informations saisies.
J'ai déjà gérer la partie du crop de l'image. En revanche pour l'upload je n'arrive pas a récupérer directement l'image sans la stockée.
Pour le moment j'upload donc l'image dans un fichier puis je stocke dans ma bdd la photo de l'utilisateur et je stocke cette photo en session cela ne recharge pas la session directement pourquoi ? (je suis obligé de retaper une url pour que ça prenne en compte la photo dans la session).
Voici ce que ça pourrait donné :
Voici mon code dans le controller que j'apelle avec Plupload:
public function compte_photo(){
if(!empty($this->request->params'form']'file'])){
if($this->request->params'form']'file']'error'] == 0){
$photo = $this->request->params'form']'file'];
$fichier = explode('.',$photo'name']);
$extension = '.'.end($fichier);
$extensions = array('.png', '.jpg', '.jpeg');
if(!in_array($extension, $extensions)){
die('{"erreur":true,"message":"Seul les fichiers au format .png, .jpg ou .jpeg sont autorisés"}');
}
$taille_maxi = 5000000;
$taille = filesize($photo'tmp_name']);
if($taille > $taille_maxi){
die('{"erreur": true,"message":"Le fichier est trop volumineux. Veuillez télécharger une photo inférieure à 5 MB"}');
}
$this->Utilisateur->id = $this->Auth->user('id');
$data = $this->Utilisateur->read();
$photo'name'] = $data'Utilisateur']'username'].$extension;
$repertoire = 'profils/'.$photo'name'];
$this->Utilisateur->saveField('photo', $repertoire);
if(!file_exists(dirname(IMAGES.$repertoire))){
mkdir(dirname(IMAGES.$repertoire),0777,true);
}
move_uploaded_file($photo'tmp_name'], IMAGES.$repertoire);
chmod(IMAGES.$repertoire,0777);
$this->Session->write('Auth.User.photo',$repertoire);
die('{"erreur": false}');
}
}
}
Pour plus d'infos n’hésitez pas.
J’ose faire un up' si quelqu'un saurait m'aider je lui en serais très reconnaissant.
tu veux dire que le problème est, qu'après l'appel de la fonction "compte_photo" qui ajoute le répertoire de la photos uploadé dans la session 'Auth.User.photo', la session n'est pas mise à jour tout de suite?
a quelle moment tu veux lire la session 'Auth.User.photo'? (qui est donc vide si j'ai bien compris)
Je souhaite uploader la photo via plupload pour qu'il me l'affiche direct si je peux éviter de la stocker en session ça serait un plus car avec ma méthode je la stocke bien en session mais je suis obliger de faire un redirect vers cette même page pour que la session soit actualisée.
bon du coup j'ai pas mes réponses ^^.
sinon, quand plupload a fini d'uploader la photo, il appelle un événement :
FileUploaded(uploader:Uploader, file:File, response:Object).
Je pense que response doit être ce qu'a retourné ta fontion d'upload, donc dans la fonction qui upload tu peut ajouter le nom du fichier :
die('{"erreur": false, "url": '.$repertoire.'}');
ou alors directement depuis la variable file.name à voir?
ensuite tu peut t'amuser avec :
uploader.bind('FileUploaded', function(uploader, file, response) {
var url = /* trouver l'url avec file.name ou avec la response */
$('form div.croppMe div.img').html('<?php echo $Html->image(IMAGES); ?>' + url);
});
La Session n'est pas vide quand je la lis mais Session'Auth']'photo'] l'est bien après mon retour de plupload (je suis obliger d'actualiser ma page pour que ca ne le soit plus). Je vais essayer ta solution de faire passer l'url de la photo en réponse.
Ta solution fonctionne bien je n'ai plus besoin de stocké ma photo ni en Session ni dans ma bdd sauf que mon plugin de Crop ne fonctionne plus je vais approfondir un peu plus de ce coté là.