Hi Jörg,
I'll show you the basics of how I just did this. In my case, the files
are stored above webroot and there's a record for each in the
database. The table was created like so:
CREATE TABLE item_files
(
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL,
item_id INT(10) NOT NULL,
directory VARCHAR(255) NOT NULL,
basename VARCHAR(64) NOT NULL,
extension VARCHAR(4) NOT NULL,
type VARCHAR(64) NOT NULL,
size INT(11) UNSIGNED NOT NULL,
FOREIGN KEY (item_id) REFERENCES items (id) ON DELETE CASCADE
)
ENGINE=MyISAM;
First, create a directory inside /app. Call it 'files' or something
and put your PDFs in it. These are now inaccessible from the browser.
Don't confuse this with /app/webroot/files, which is accessible.
In your controller, create a download() method. I'm leaving out a lot
of stuff in my own; this is just the basics. This action uses the
MediaView, which is perfect for serving files that are above webroot.
public function download($item_file_id)
{
// you'll want to check the login status here ...
$result = $this->ItemFile->find(
'first',
array(
'conditions' => array('ItemFile.id' => $item_file_id),
'fields' => array('*'),
'contain' => array(
'Item' => array(
'fields' => array('*')
)
)
)
);
Configure::write('debug', 0);
$this->view = 'Media';
/* MediaView is really irritating
*/
$name = substr(
$result['ItemFile']['basename'],
0,
-(strlen($result['ItemFile']['extension']))
);
$params = array(
'id' => $result['ItemFile']['basename'],
'name' => $name,
'download' => true,
'extension' => $result['ItemFile']['extension'],
'path' => APP.$result['ItemFile']['directory'].DS,
'mimeType' => array($result['ItemFile']['type'])
);
$this->set($params);
}
That's about it. Have a look in cake/libs/view/media.php to see how
MediaView works.
On Mon, Jul 13, 2009 at 6:22 AM, joergpb<[email protected]> wrote:
>
> Hello CakePhp Group!
>
> My name ist Jörg, form Berlin/Germany.
>
> I am quite new to Cake. My problem is that I need a downloadarea where
> the user can only download pdfs ( or any files) from the filesystem
> after he logged in. So the URL to the download has to be dynamic.
>
> Any idea how I may get this done with cake?
>
> Thanks a lot !
>
> Jörg
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---