télécharger un fichier de WWW_ROOT."/files/dossier/fichier"

1 view
Skip to first unread message

minoX

unread,
Jul 23, 2008, 7:49:24 AM7/23/08
to Cakephp-fr
Bonjour,
j'aimerais télécharger un fichier qui est stoker dans: documents\app
\webroot\/files/documents/
j'ai essayer de le faire en deux façons, la première:

<?php echo $html->link($document['Document']['fichier'],WWW_ROOT."/
files/documents/".$document['Document']['fichier']); ?>

voila se qui me sort quand je clique sur le lien :

The requested URL /documents/documents/D:\workspace\documents\app
\webroot\/files/documents/test.jpg was not found on this server.

la deuxième en dur:

echo "<a href=".WWW_ROOT."/files/documents/".$document['Document']
['fichier'].">".$document['Document']['fichier']."</a>";

un message d'erreur de firefox s'affiche :

Firefox ne sait pas ouvrir cette adresse car le protocole (d) n'est
associé à aucun programme
Merci d'avance pour vos réponses.

Pierre MARTIN

unread,
Jul 23, 2008, 8:33:06 AM7/23/08
to Cakephp-fr
As-tu essayé tout simplement :
$html->link($document['Document']['fichier'], '/files/documents'.
$document['Document']['fichier']);

minoX

unread,
Jul 23, 2008, 9:11:07 AM7/23/08
to Cakephp-fr
merci pour la réponse,
oui j'ai essayé ,dans ce cas ,il croit que files est un contrôleur et
il m'affiche: FilesController could not be found.

Frycake

unread,
Jul 23, 2008, 10:49:04 AM7/23/08
to Cakephp-fr
Bonjour,
Voilà la solution que j'ai utilisé !
Peut être existe t-il une solution pour échapper aux routes controller/
action comme pour les images mais je ne connais pas l'astuce.

function download ($file)
{
$filePath = "your/path/.$file;

// Check against path injection
if (preg_match('/^[A-Za-z0-9_\-\.]*$/', $file)
&& is_readable($filePath))
{
$size = @filesize($filePath);

if (!headers_sent())
{
if ($size > 0)
{
header('Content-length: ' . $size);
}

header('Content-Type:application/octet-stream');
header('Content-Disposition: attachment;filename='.
$file);
}

readfile($filePath);
Configure::write ('debug', 0);
exit;
}

return $this->redirect('/');
}

francky06l

unread,
Jul 23, 2008, 5:25:00 PM7/23/08
to Cakephp-fr
En fait ca doit marcher si avec un html->link si on precise "http://"
dans le link ..
Dans ce cas, cake n'essaye pas de "traduire" l'url ... Avec
FULL_BASE_URL . 'files' . DS . 'documents' . DS . $nomdefichier dans
un html->link ca doit marcher ...

Pierre MARTIN

unread,
Jul 23, 2008, 6:10:06 PM7/23/08
to Cakephp-fr
Pour information, voici une instruction qui fonctionne à merveille
chez moi (c'est dans un code de test, donc c'est un peu crade, mais je
n'ai pas le temps de le reprendre de suite) :

$html->link($html->image('logo-pdf.png', Array('alt'=>'Votre CV')).'
Télécharger le CV en pdf', '/files/cvs/'.$cv['Cv']
['fichierAssocie'].'.pdf',array(), false, false)
> Les fichiers sont dans "app\webroot\files\cvs"

Voilà ... si cela peut aider !

minoX

unread,
Jul 25, 2008, 12:08:03 PM7/25/08
to Cakephp-fr
merci énormément pour vos réponses,
ça marche très bien avec la solution Pierre MARTIN,
merci a tous.
Reply all
Reply to author
Forward
0 new messages