Yii How Download Uploaded Files?

Hello, i have some problem. I need download my (uploaded file when i create new TASK ) :

My Task Controller :


public function actionCreate() {

        $model = new Task;


// Uncomment the following line if AJAX validation is needed

// $this->performAjaxValidation($model);


        if (isset($_POST['Task'])) {

            $model->attributes = $_POST['Task'];


            $uploadedFile = CUploadedFile::getInstance($model, 'image');

            $fileName = time() . '_' . $uploadedFile->name;  // $timestamp + file name


            if (!is_dir(Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id)) {

                mkdir(Yii::app()->basePath . '/upload/' . $model->project->id);

            }

           

            if ($model->save()) {

                

                mkdir(Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id);

                $path = Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id .'/'.  $fileName;

                if ($uploadedFile->saveAs($path)) {

                    $modelFile = new Files;

                    $modelFile->task_id = $model->id;   

                    $modelFile->path = $path;

                    $modelFile->save();

                }

            }

This function create new task and upload file to : basePath/upload/project_id/task_id/file.png

How i can render this file.png? and how i can download it?

Path "basePath/upload/project_id/task_id/file.png" has saved in "files" table .

I use EDownloadHelper in my project, have a CButtonColumn with button to download attachment


'download' => array

                    (

                        'label'=>'Baixar Anexo',

                        'imageUrl'=>Yii::app()->request->baseUrl.'../images/report-word.png',

                        'visible'=>'($data->anexo===null)?false:true;',

                        'url'=>'Yii::app()->createUrl("Visitas/download", array("id"=>$data->id_controle_visita))'                        

                    ), 

In View file:




<?php

Yii::import('ext.helpers.EDownloadHelper');

$id = Yii::app()->getRequest()->getQuery('id');


EDownloadHelper::download('vendors/anexos/'.$id.'.doc');

?>

I have now error :


Trying to get property of non-object 

In:


$file = Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id;

In my _view project i have:


<td class="tasks"><?php   echo CHtml::link("Download file", array('download', 'id'=>$task->id)); ?></td>

In projekt controller i have:


 public function actionDownload($id)

        {

          $model=$this->loadModel($id);

          

          $file = Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id;

          

          if (file_exists($file))

                {

                        $fileDir=Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id;

                        Yii::app()->request->sendFile(

                                $model->image,

                                file_get_contents($fileDir . $model->image),

                                $model->image

                        );  

                }

                else

                {

                        throw new CHttpException(404,'Żądany plik nie istnieje.');

                        return $model;

                }

        }<td class="tasks"><?php   echo CHtml::link("Pobierz plik", array('download', 'id'=>$task->id)); ?></td>

In action task controller :


public function actionCreate() {

        $model = new Task;


// Uncomment the following line if AJAX validation is needed

// $this->performAjaxValidation($model);


        if (isset($_POST['Task'])) {

            $model->attributes = $_POST['Task'];


            $uploadedFile = CUploadedFile::getInstance($model, 'image');

            $fileName = time() . '_' . $uploadedFile->name;  // $timestamp + file name


            if (!is_dir(Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id)) {

                mkdir(Yii::app()->basePath . '/upload/' . $model->project->id);

            }

           

            if ($model->save()) {

                

                mkdir(Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id);

                $path = Yii::app()->basePath . '/upload/' . $model->project->id . '/' . $model->id .'/'.  $fileName;

                if ($uploadedFile->saveAs($path)) {

                    $modelFile = new Files;

                    $modelFile->task_id = $model->id;   

                    $modelFile->path = $path;

                    $modelFile->save();

                }

            }

            $this->redirect(array('project/index'));

        }


        $this->render('create', array(

            'model' => $model,

        ));

    }

I add in accessRules:


 array('allow', // allow admin user to perform 'admin' and 'delete' actions

                'actions' => array('download'),

                'users' => array('Administrator'),

            ),

And add public $file; in project model.