Yii框架CMultifileupload无法正常工作

时间:2013-05-27 10:55:12

标签: yii

我正在尝试使用CMultiFileUpload和CUploadedFile实现多文件上传,但它不起作用。具体来说,即使考虑到我正在使用'enctype'=>,_POST也无法正常工作视图中选项中的“multipart / form-data”:

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'examen-form',
    'enableAjaxValidation'=>false,
    'htmlOptions' => array('enctype' => 'multipart/form-data'),

)); ?&GT;

这是用于CMultiFileUpload的小部件和参数:

        <div class="row">
            <?php echo $form->labelEx($model,'archivo_foto')?>
            <?php //echo CHtml::activeFileField($model,'archivo_foto')?>

            <?php $this->widget('CMultiFileUpload', array(
                    'model' => $model,
                    'name' => 'archivo_foto',
                    'accept' => 'jpeg|jpg|gif|png|txt', // useful for verifying files
                    'duplicate' => 'Duplicate file!', // useful, i think
                    'denied' => 'Invalid file type', // useful, i think
                    'max' => 10,
                    'htmlOptions' => array( 'multiple' => 'multiple', 'size' => 25 ),
            )); ?>

            <?php echo $form->error($model,'archivo_foto')?>
    </div>

另一方面,控制器动作以这种方式实现:

        public function actionUpdateam($id)
    {
            $model=$this->loadModel($id);
            $dir=Yii::getPathOfAlias('application.uploads');
            $model->archivo_documento='funciona 0';
            if(isset($_POST['Examen'])) {

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

                    // THIS is how you capture those uploaded images: remember that in your CMultiFile widget, you set 'name' => 'archivo_foto'
                    $images = CUploadedFile::getInstancesByName('archivo_foto');

                    // proceed if the images have been set
                    $model->archivo_documento='funciona uno';
                    if (isset($images) && count($images) > 0) {
                            $model->archivo_documento='funciona dos';
                            // go through each uploaded image
                            foreach ($images as $image) {
                                    echo $image->name.'<br />';
                                    $image->saveAs($dir.'/'.$image->name);
                                    $model->archivo_foto = $model->archivo_foto."+".$image->name;
                            }

                            // save the rest of your information from the form
                            if ($model->save()) {
                                    $this->redirect(array('view','id'=>$model->id));
                            }
                    }

            }

            $this->render('update_am',array(
                    'model'=>$model,
            ));
    }

最后,我认为提及模型使用的规则很重要(也可能是导致问题的原因):

array('archivo_foto','file','allowEmpty'=>true,'maxFiles'=>10),

我认为问题出在post方法中,因为控制器没有上传文件而且没有对数据库进行任何更改。但我不确定。

3 个答案:

答案 0 :(得分:0)

尝试更改为'htmlOptions'=>array('multiple'=>true)

答案 1 :(得分:0)

在表单

中添加以下代码
'htmlOptions' => array(
            'enctype' => 'multipart/form-data',
        ),

喜欢

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>true,

     'htmlOptions' => array(
        'enctype' => 'multipart/form-data',
    ),
)); ?>

答案 2 :(得分:0)

我正在使用相同的扩展程序,它正在使用这些代码 在视图文件

<?php $form = $this->beginWidget('CActiveForm', array(
'id'=>'adpost-form',
'enableClientValidation'=>true,
'clientOptions' => array(
     'validateOnSubmit'=>true,
     'validateOnChange'=>false,
     'afterValidate'=>'js:submiAjaxForm'
 ),
'htmlOptions' => array('enctype' => 'multipart/form-data'),

)); ?&GT;

<?php
                $this->widget('CMultiFileUpload', array(
                    'name' => 'photo_name',
                    'accept' => 'jpeg|jpg|gif|png',
                    'duplicate' => 'File is not existed!',
                    'denied' => 'Not images', // useful,
                    'htmlOptions' => array(
                        'style' =>'color: transparent;',
                    ),
                ));
                ?>

在控制器中