kopecsrk
(Dzumir)
1
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 .
gugoan
(Gugoan)
2
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');
?>
kopecsrk
(Dzumir)
3
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.