Bonjour,
j'esper vous vous portez bien
Voila j'ai un soucis avec le téléchargement des fichiers sous cake 2.7.1
j'ai des fichiers dans un repertoire et j'aimerai qu'un utilisateur puisse les téléchargés à partir d'un lien voila ce que je fais jusqu'ici après quelques recherche
Voila je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire
dans mon controller je fais ceci

    public function membre_sendFile($id) {
            $file = $this->Campagne->getFile($id);
            $this->response->file($file[IMAGES . 'Campagne' . DS . $id]);
            //Retourne un objet reponse pour éviter que le controller n'essaie de
            // rendre la vue
            return $this->response;
        }

et dans ma vue je fais ceci

<?php echo $this->Html->link(' Télécharger',array('membre' =>true,'action' => 'sendFile' ,$campagne['Campagne']['mediaplanning'],'full_base' => true),array('class'=> 'btn btn-sucess btn-xs ','title'=>'Détails')); ?>

Ce que je veux

je veux que lorsque l'on fait un click sur le lien télécharger, que le fichier apparait en téléchargement

Ce que j'obtiens

error database

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'getFile' at line 1

mes fichier se trouvent dans le repertoire img/monrepertoire

quelqu'un a une idée? SVP

3 réponses


romses
Auteur
Réponse acceptée

Merci lartak, tu vas me trouvé top con la methode je ne l'ai pas j'ai cru que c'était une methode du framework, tu peut me proposé autre choses? qui fonctionne avec la version 2.7.1 de cake?

Bonsoir.
Pourrais-tu nous montrer à quoi correspond ta méthode getFile ?

Si ta requête SQL est faite pour récupérer l'enregistrement correspondant à la valeur de la variable $id, tu peux tout simplement par exemple utiliser la méthode findById ou alors tu fais un find('first') en passant en paramêtre la condition pour l'id.
Autre chose, il est inutile de définir un lien absolu dans la méthode link du Helper Html et si tu veux forcer le téléchargement, il te suffit de définir le paramêtre download à true dans la méthode file :

Si vous voulez, vous pouvez aussi forcer un fichier à être téléchargé au lieu d’être affiché dans le navigateur en spécifiant les options:

$this->response->file(
    $file['path'],
    array('download' => true, 'name' => 'foo')
);

Source : Les Objets Request et Response » Envoyer des fichiers.
Au passage, pour rappel la constante IMAGES est obsolète depuis la version 2.4.