Загрузка изображений в базу данных - PullRequest
0 голосов
/ 16 января 2012

Я довольно новичок в Yii и у меня возникли некоторые проблемы.

Я пытаюсь загрузить изображения в базу данных после wiki .Тем не менее, я не могу заставить его работать.Он всегда видит, что ничего не загружается.

Вот мой код для модели:

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 ]

2 голосов
/ 16 января 2012

Следующая строка не требуется в вашем 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(); ?>
0 голосов
/ 16 марта 2013

Код для сохранения изображения в базе данных

Модель

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>

Добавьте это к своим правилам в модели

return array( array('uploadedFile', 'file', 'types'=>'jpg, gif, png'),
                    array('image_name,image_type,image_size,image', 'safe'));

Пожалуйста, удалите изображение - требуется в правилах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...