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