I found solution using Media Views.

        // No debug mode
        Configure::write('debug', 0);

        // No layout
        $this->autoLayout = false;

        // Media View
        $this->view = 'Media';

        $params = array(
                'id' => 'my_video.mp4',
                'name' => 'my_video',
                'download' => true,
                'extension' => 'mp4', // must be lower case
                'mimeType' => array('mp4' => 'video/mp4'),
                'path' => WWW_ROOT . 'videos' . DS
        );

        $this->set($params);

Don't forget the mimeType, otherwise it doesn't work.


On Oct 5, 10:23 am, thomaus <[email protected]> wrote:
> Sure! Here it is :
>
>         function dowloadVideo()
>         {
>                 Configure::write('debug', 0);
>
>                 $this->autoLayout = false;
>                 $this->autoRender = false;
>
>                 $root = 'http://www.mydomain.com/app/webroot/videos/';
>                 $file = 'test.mp4';
> //              $file = 'test.mp3';
>
>                 $path = $root . $file;
>                 $type = '';
>
>                 $file_size = 0;
>                 $ch = curl_init($path);
>                 curl_setopt($ch, CURLOPT_NOBODY, true);
>                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
>                 curl_setopt($ch, CURLOPT_HEADER, true);
>                 $data = curl_exec($ch);
>                 curl_close($ch);
>
>                 if ($data === false)
>                 {
>                         $file_size = false;
>                 }
>                 if (preg_match('/Content-Length: (\d+)/', $data, $matches))
>                 {
>                         $file_size = (float) $matches[1];
>                 }
>
>                 header('Content-Description: File Transfer');
>                 header('Content-Type: video/mp4');
> //              header('Content-Type: audio/mp3');
>                 header('Content-Disposition: attachment; filename=' . $file);
>                 header('Content-Transfer-Encoding: binary');
>                 header('Expires: 0');
>                 header('Cache-Control: must-revalidate, post-check=0, 
> pre-check=0');
>                 header("Cache-Control: private", false);
>                 header('Pragma: public');
>                 header('Content-Length: ' . $file_size);
>                 ob_clean();
>                 flush();
>                 readfile($path);
>
>                 exit;
>     }
>
> On Oct 4, 5:36 pm, "Ma'moon" <[email protected]> wrote:
>
>
>
>
>
>
>
> > Can you post your controller code and let us see how you exactly implemented
> > this?
>
> > On Tue, Oct 4, 2011 at 10:41 AM, thomaus <[email protected]> wrote:
> > > Nobody no clue?
>
> > > On Oct 3, 5:36 pm, thomaus <[email protected]> wrote:
> > > > Thanks for your answers.
>
> > > > Here is how I set my header (the video file is a .mp4 one)
>
> > > >                 header('Content-Description: File Transfer');
> > > >                 header('Content-Type: video/mp4');
>
> > > > //             This is for the mp3 file
> > > > //              header('Content-Type: audio/mp3');
>
> > > >                 header('Content-Disposition: attachment; filename=' .
> > > $file);
> > > >                 header('Content-Transfer-Encoding: binary');
> > > >                 header('Expires: 0');
> > > >                 header('Cache-Control: must-revalidate, post-check=0,
> > > pre-check=0');
> > > >                 header("Cache-Control: private", false);
> > > >                 header('Pragma: public');
> > > >                 header('Content-Length: ' . $file_size);
>
> > > > But anyway, the code works when not executed with CakePHP, so it
> > > > should not be a header problem.
>
> > > > On Oct 3, 5:11 pm, somebody who carez <[email protected]>
> > > > wrote:
>
> > > > > You may need to set a correct header for the file to get the browser 
> > > > > to
> > > > > process it correctly.
>
> > > > >http://php.net/manual/en/function.readfile.php
>
> > > > > Thank you,
> > > > > -Alex Goretoy
>
> > > > > On Mon, Oct 3, 2011 at 10:03 AM, thomaus <[email protected]> wrote:
> > > > > > Hi there,
>
> > > > > > I'm experiencing a very strange problem. I'm trying to remotely
> > > > > > download a video file.
>
> > > > > > I've done a very basic PHP code using the readfile() function. This
> > > > > > code works absolutely fine.
>
> > > > > > Now when I copy / paste the exact same code into my CakePHP
> > > > > > controller, the URL works, a file is actually downloaded, the size 
> > > > > > of
> > > > > > the downloaded file is correct, but the type of the file is not
> > > > > > recognized, i.e. the video can't be played.
> > > > > > I tried the same with a mp3 file, just to check if the problem was
> > > not
> > > > > > a video format one, and the same problem happened. And again the
> > > > > > original PHP code is working fine with this mp3 file.
>
> > > > > > I have added these 3 lines just in case in my controller :
> > > > > >                Configure::write('debug', 0);
> > > > > >                $this->autoLayout = false;
> > > > > >                $this->autoRender = false;
> > > > > > but the same problem happens.
>
> > > > > > Any idea?
>
> > > > > > --
> > > > > > Our newest site for the community: CakePHP Video Tutorials
> > > > > >http://tv.cakephp.org
> > > > > > Check out the new CakePHP Questions 
> > > > > > sitehttp://ask.cakephp.organdhelp
> > > > > > others with their CakePHP related questions.
>
> > > > > > To unsubscribe from this group, send email to
> > > > > > [email protected] For more options, visit this
> > > group
> > > > > > athttp://groups.google.com/group/cake-php
>
> > > --
> > > Our newest site for the community: CakePHP Video Tutorials
> > >http://tv.cakephp.org
> > > Check out the new CakePHP Questions sitehttp://ask.cakephp.organdhelp
> > > others with their CakePHP related questions.
>
> > > To unsubscribe from this group, send email to
> > > [email protected] For more options, visit this group
> > > athttp://groups.google.com/group/cake-php

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to