2016-11-22 11:15:42 5589次浏览 4条回答 1 悬赏 15 金钱
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

<?= $form->field($model, 'file')->fileInput() ?>

<button>Submit</button>

<?php ActiveForm::end() ?>

models:

public function rules()
{
    return [
        [['file'], 'file', 'skipOnEmpty' => false,'extensions'=>'xls,xlsx'],
    ];
}

public function upload()
{
    if($this->validate()){
        $this->file->saveAs('uploads/' . $this->file->baseName . '.' . $this->file->extension);
        return true;

    }else{
        return false;
    }
}

控制器

    $model = new UploadForm();
    if(Yii::$app->request->post()){
        $model->file = UploadedFile::getInstance($model, 'file');
        if($model->upload()){
            //文件上传成功
            echo "File successfully uploaded";
            return;
        }
    }

    return $this->render('upload', ['model' => $model]);

发现压根就没有上传的文件,文件名搜不到,是不是没有在activeform引入方法URL

  • 回答于 2016-11-22 16:44 举报

    buttun 的 type=submit 试试

  • 回答于 2016-11-25 23:49 举报

    第一个if语句,内容换成Yii::$app->request->isPost,试一下。还有,你的文件验证规则应该是上传Excel文件的,你是不是上传了其他类型的文件。如果还有问题,在控制器里打印上传错误看一下,print_r($model->getErrors()),根据报错来处理。

  • 回答于 2016-12-23 21:14 举报

    [['file'], 'file', 'skipOnEmpty' => false,'extensions'=>'xls,xlsx', 'checkExtensionByMimeType' => false], 就可以了
    我根据调试发现,默认根据MIME类型来判断扩展名是启用的,并且我的xlsx文件被PHP的Magic扩展名库识别为了zip类型,从而zip和xlsx不相等,所以验证不通过了。不清楚是不是因为我的xlsx文件是wps或者moodle导出的原因,没有试验用Excel2010是否就能正确识别MIME,反正Yii2本身允许你通过配置参数不使用这个推断,绕过去就可以了。

  • 回答于 2017-01-18 18:12 举报

    自己写个类最好了

您需要登录后才可以回答。登录 | 立即注册
xingyu
试用期

xingyu

注册时间:2016-11-04
最后登录:2017-02-23
在线时长:3小时50分
  • 粉丝0
  • 金钱15
  • 威望0
  • 积分45

热门问题