文件上传

由于每个城市每个月都会有月报上传,不可能一个一个城市的去上传。所以这里记录的是上传压缩包文件,然后解压在uploads文件夹中。

1.第一步先建立存储这些文件路径的数据表。


time是月份,楼主是直接存储的月份,并没有使用时间戳。city这个字段是城市表中的城市Id,最后downloadLinks是文件的路径。

2.第二步是创建上传的页面,(也就是view层)。

echo BSHtml::alert('danger', '<p>命名规则:城市Id.xlsx</p><p>压缩包格式: zip格式</p>');
$form1= $this->beginWidget('bootstrap.widgets.BsActiveForm',array(
    'id'=>'zip_import',
    'method'=>'POST',
    'htmlOptions'=>array('enctype'=>'multipart/form-data'),
));
echo BSHtml::textFieldControlGroup('sj','',array('placeholder'=>'2017-09','style'=>'width:200px'));
echo BSHtml::fileFieldControlGroup('zipIm');
echo BSHtml::submitButton('上传zip并解压',array('class'=>'btn btn-primary'));
$this->endWidget();

3.第三步就是最重要的一步操作也就是上传了(Controller)。

    public function actionCreate()
    {
        set_time_limit(0);
        if (Yii::app()->request->isPostRequest) {
            $file_zip = CUploadedFile::getInstanceByName('zipIm');  //获取上传zip文件的名字
            $dir_url = './uploads/' . trim($_POST['sj']) . '/';
            if (!empty($file_zip) && $this->makeDir($dir_url) && !empty($_POST['sj'])) {//处理zip    makeDir上传目录
                if (!in_array($file_zip->type, Yii::app()->params['zip_type'])) {    //in_array搜索是否存在指定的值
                    $this->hint('danger', '文件类型错误');
                    $this->redirect(Yii::app()->request->urlReferrer);
                    die;
                }
                if ($file_zip->size > Yii::app()->params['zip_max_size']) {
                    $this->hint('danger', '文件过大');
                    $this->redirect(Yii::app()->request->urlReferrer);
                    die;
                }
                $file_zip->saveAs($dir_url . $file_zip->name);
                $zipA = new ZipArchive();
                if ($zipA->open($dir_url . $file_zip->name) === TRUE) {
                    $zipA->extractTo($dir_url);
                    $zipA->close();
                    @unlink($dir_url . $file_zip->name);
                    $rel_model = Relationship::model()->findAll('depth=3');
                    if (!empty($rel_model)) {
                        foreach ($rel_model as $value) {
                            $url = './uploads/' . $_POST['sj'] . '/' . $value->city_coordinate . Yii::app()->params['excelSuffix'];
                            if (file_exists($url)) {
                                $exites=  Presentation::model()->find('time=:time and city=:city',array(':time'=>$_POST['sj'],':city'=>$value->Id));
                                if(empty($exites)){
                                    $model = new Presentation();
                                    $model->time = $_POST['sj'];
                                    $model->city = $value->Id;
                                    $model->downloadLinks = strstr($url,'/uploads');
                                    $model->save();
                                }
                            }
                        }
                    }
                    $this->hint('success', '成功导入并解压');
                    $this->redirect(Yii::app()->request->urlReferrer);
                    die;
                } else {
                    $this->hint('danger', '文件夹创建失败');
                    $this->redirect(Yii::app()->request->urlReferrer);
                    die;
                }

            } else {
                $this->hint('danger', '信息不完全');
                $this->redirect(Yii::app()->request->urlReferrer);
                die;
            }//处理zip

        }//ispost
        $this->render('create');
    }

以上就是上传文件的代码了,model层就不需要贴出来了吧。使用Gii生成就可以了。

下一篇就写下载上传的这些文件。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页