Загрузка изображений в базу данных
Я довольно новичок в Yii, и у меня есть некоторые проблемы.
Я пытаюсь загрузить изображения в базу данных после вики. Тем не менее, я не могу заставить его работать. Он всегда видит, что ничего не загружается.
Вот мой код для модели:
public $uploadedFile;
/**
* Saves the name, size, type and data of the uploaded file
*/
public function beforeSave()
{
if($file=CUploadedFile::getInstance($this,'uploadedFile'))
{
$this->image_name=$file->name;
$this->image_type=$file->type;
$this->image_size=$file->size;
$this->image=file_get_contents($file->tempName);
}
return parent::beforeSave();
}
Контроллер для создания:
public function actionCreate()
{
$model=new Subdivision;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Subdivision']))
{
$model->attributes=$_POST['Subdivision'];
$model->image = CUploadedFile::getInstance($this,'image');
if($model->save())
$this->redirect(array('view','id'=>$model->subdivision));
}
$this->render('create',array(
'model'=>$model,
));
}
и мой код формы:
<div class="row">
<?php echo $form->labelEx($model,'uploadedFile'); ?>
<?php echo $form->fileField($model,'uploadedFile'); ?>
<?php echo $form->error($model,'uploadedFile'); ?>
</div>
кто-нибудь может помочь?
2 ответа
Следующая строка не нужна в вашем actionCreate
:
$model->image = CUploadedFile::getInstance($this,'image'); // remove it
Ваша обработка POST должна выглядеть
if (isset($_POST['Subdivision']))
{
$model->attributes = $_POST['Subdivision'];
if ($model->save())
$this->redirect(array('view','id'=>$model->subdivision));
}
Также убедитесь, что ваш image
Поле в базе данных имеет соответствующий тип BLOB для хранения двоичных данных.
Редактировать, рабочий образец
Модель (остались только важные детали)
public $uploadedFile;
public function rules()
{
return array(
array('uploadedFile', 'file', 'types'=>'jpg, gif, png'),
array('image_name,image_type,image_size,image', 'safe')
);
}
public function beforeSave()
{
if ($file = CUploadedFile::getInstance($this, 'uploadedFile'))
{
$this->image_name = $file->name;
$this->image_type = $file->type;
$this->image_size = $file->size;
$this->image = file_get_contents($file->tempName);
}
return parent::beforeSave();
}
контроллер
public function actionIndex()
{
$model = new User(); /* I called my model User in your case it's Subdivision */
if (isset($_POST['User']))
{
$model->attributes = $_POST['User'];
$model->image = CUploadedFile::getInstance($this, 'image');
if ($model->save())
$this->redirect(array('index'));
}
$this->render('index', array(
'model' => $model
));
}
Посмотреть
<?php $form = $this->beginWidget('CActiveForm', array(
'htmlOptions' => array('enctype' => 'multipart/form-data')
)); ?>
<div class="row">
<?php echo $form->labelEx($model, 'uploadedFile'); ?>
<?php echo $form->fileField($model, 'uploadedFile'); ?>
<?php echo $form->error($model, 'uploadedFile'); ?>
</div>
<input type="submit" value="Save">
<?php $this->endWidget(); ?>
Код для сохранения изображения в базе данных
модель
public function beforeSave()
{
if($file=CUploadedFile::getInstance($this,'uploadedFile'))
{
$this->image=$file->name;
$this->image=$file->type;
$this->image=$file->size;
$this->image=file_get_contents($file->tempName);
}
return parent::beforeSave();
}
форма
<?php $form = $this->beginWidget('CActiveForm', array(
'htmlOptions' => array('enctype' => 'multipart/form-data')
)); ?>
<div class="row">
<?php echo $form->labelEx($model,'uploadedFile'); ?>
<?php echo $form->fileField($model,'uploadedFile'); ?>
<?php echo $form->error($model,'uploadedFile'); ?>
</div>
Добавьте их к своим правилам в Model
return array( array('uploadedFile', 'file', 'types'=>'jpg, gif, png'),
array('image_name,image_type,image_size,image', 'safe'));
Пожалуйста, удалите изображение - обязательно в правилах.