Category Covered

Cakephp file download problem

When downloading several types of files like .gif, .wmv, .pdf etc in a cakephp application sometimes we are facing some common problems . The problems we are facing on during the implementation of download option on cakephp are mostly :


    Not Found  Error: The requested address …
    Media file corrupt when download finished but the file sized is same
    cakephp Media view is not working properly


If you are also face these problems then follow the given steps:

function download($fileName = null)
{
$dl = 1;
$folder = APP.'webroot'.DS.'files'.DS.'wallpeper'.DS;
//$folder = APP.DS.'files'.DS.'wallpaper'.DS;
//If you get the message Not Found Error: The requested address
$path_parts = pathinfo($folder.$fileName);
$mime = $this->mime_content_type($fileName);
$this->view = 'Media';
$params = array( 'id' => $path_parts['basename'], 'name' => $path_parts['filename'], 'download' => $dl, 'extension' => $path_parts['extension'], 'mimeType' => array($path_parts['extension'] => $mime), 'path' => $folder );
$this->set($params); }

 



If call to undefined function mime_content_type() is your error then please add the function mime_content_type() on your controller file

function mime_content_type($filename)
{
$mime_types = array
(
'txt' => 'text/plain',
'htm' => 'text/html',
'html' => 'text/html',
'php' => 'text/html',
'css' => 'text/css',
'js' => 'application/javascript',
'json' => 'application/json',
'xml' => 'application/xml',
'swf' => 'application/x-shockwave-flash',
'flv' => 'video/x-flv',
 
/* images*/
 
'png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
'ico' => 'image/vnd.microsoft.icon',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
 
/* audio/video */
 
'mp3' => 'audio/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
 
/* archives*/
 
'zip' => 'application/zip',
'rar' => 'application/x-rar-compressed',
'exe' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'cab' => 'application/vnd.ms-cab-compressed',
 
/*adobe*/
 
'pdf' => 'application/pdf',
'psd' => 'image/vnd.adobe.photoshop',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
 
/* ms office*/
 
'doc' => 'application/msword',
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
 
/* open office */
 
'odt' => 'application/vnd.oasis.opendocument.text',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet', );
$ext = strtolower(array_pop(explode('.',$filename)));
if (array_key_exists($ext, $mime_types))
{
return $mime_types[$ext];
}
elseif (function_exists('finfo_open'))
{
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mimetype;
}
else
{
return 'application/octet-stream';
}
}