Home > CakePHP, php > Downloads mit CakePHP

Downloads mit CakePHP

March 10th, 2009

Über die Vorteile und Funktion der Media Views von CakePHP habe ich ja schon gesprochen. Wenn man den Codeschnipsel der dort zur Verfügung gestellt wird ein wenig erweitert und in den Application Controller packt, erhält man mit wenigen Handgriffen ein feines Download Center.

class AppController extends Controller {
 
	function download(){
		// Extrahiere die Dateiname und Typ aus der URL
		// Die Url hat das Format /controller/download/extension/file
		// Beispiel /users/download/pdf/flyer
		$extension = $this->params['pass'][0];
		$file = $this->params['pass'][1];
		$download_folder = WWW_ROOT;
 
		// Gib einen 404er aus wenn die Datei nicht existiert
		if(!file_exists($download_folder . $file . "." . $extension))
			$this->cakeError('error404');
 
		// Sende die Datei an den Browser
		$this->view = 'Media';
		$params = array(
		       'id' => $file . "." . $extension,
		       'name' => $file,
		       'download' => true,
		       'extension' => $extension,
		       'path' => $download_folder
		);
		$this->set($params);		
	}
 
}

Diese Methode dient nur als Basis für weitere Feinheiten, so kann man z.B. prüfen ob der User zum Download berechtigt ist, einen Zähler einbauen und vieles mehr. Da diese Methode in den Application Controller gesteckt wurde kann Sie überall eingesetzt werden. /users/download/pdf/fyler funktioniert genauso wie /clients/download/pdf/flyer.

In diesem Fall wird davon ausgegangen dass die Dateien direkt im Webroot abgelegt sind, wer einen anderen Ablageort bevorzugt passt die Variable $download_folder an.

In diesem Zusammenhang:

  1. PDF bearbeiten mit Zend Framework in einer CakePHP Anwendung Es gibt zur Zeit noch keine PDF Unterstützung in CakePHP....
  2. Von CakePHP, Ajax Problemen und der Security Komponente Wer die “Security” Komponente von CakePHP in seinen Projekte einsetzt,...
  3. CakePHP: E-Mails über die Shell versenden Es gibt verschiedene kleiner Hürden die umschifft werden wollen, bevor...

CakePHP, php ,

  1. Christian
    February 14th, 2010 at 21:57 | #1

    Vielen Dank für dein kurzes Tutorial, es hat mir Rumgefrickel mit eigenem PHP-Code erspart! Ich kannte dieses tolle Feature von CakePHP bisher gar nicht.

  1. No trackbacks yet.