yii CUploadedFile 上传 中文乱码

在yii框架中,有一个上传类。
CUploadedFile
在上传英文名称的文件时,没什么问题出现。
如果换是文件名包含有中文时,就会出现乱码。主要是因为saveAs时,中文编码不是GBK或者GB2312
所以在保存时,把文件名转下编码
如:
iconv('utf-8','gb2312',$filename)

帖出的我上传代码,把文件名,按time()来作文件名。

1,controller里的Action代码 如下
   

public function actionEditProjectCategory(){//编辑项目分类
        $app = Yii::app();
        $projectcategory=new ProjectCategory();
        
        if($app->request->isPostRequest){
            
            $postarray['category_name']=trim($_POST["category_name"]);
            $postarray['is_show']=$_POST["is_show"];
            $postarray['category_order']=intval(trim($_POST["category_order"]));
            $postarray['category_comment']=trim($_POST["category_comment"]);

            $a=CUploadedFile::getInstance($projectcategory,'category_img');//上传文件
            if (!empty($a)){
            $b=$a->extensionName;
            $c=time();
            $postarray['category_img']="/assets/upload/".$c.".".$b;
            $a->saveAs($_SERVER['DOCUMENT_ROOT']."/assets/upload/".iconv('utf-8','gb2312',$a->name));
                if(file_exists($_SERVER['DOCUMENT_ROOT']."/assets/upload/".iconv('utf-8','gb2312',$a->name))){
                    
                $category_info=ProjectCategory::model()->findByPk(intval($_POST['category_id']));
            if (!empty($category_info->category_img)){//判断项目分类是否存在图片,如有,删除
                unlink($_SERVER['DOCUMENT_ROOT'].$category_info->category_img);
            }
                rename($_SERVER['DOCUMENT_ROOT']."/assets/upload/".iconv('utf-8','gb2312',$a->name),$_SERVER['DOCUMENT_ROOT'].$postarray['category_img']);                //重新换文件名称
            }}
            $cid=intval($_POST['category_id']);
            $projectcategory->updateByPk($cid,$postarray);
            Share::msgBox('更新成功。',"project_category" . Yii::app()->urlManager->urlSuffix);
        
        }
        //$data['categorylist']=$projectcategory->findall();
        $cid=intval($_GET['cid']);
        $data['category']=$projectcategory->findByPk($cid);
        $data['model']=$projectcategory;
        $this->render('admin/project_edit_category',$data);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一段 Yii2 上传 Excel 文件并保存的代码: // 在控制器中处理上传文件的操作 public function actionUploadExcel() { $model = new ExcelModel(); if (Yii::$app->request->isPost) { $model->excelFile = UploadedFile::getInstance($model, 'excelFile'); if ($model->upload()) { // 上传成功,保存文件并处理数据 $filePath = $model->getFilePath(); $excelData = $this->processExcelData($filePath); // 保存数据到数据库 $this->saveExcelData($excelData); return $this->redirect(['index']); } } return $this->render('uploadExcel', ['model' => $model]); } // ExcelModel 模型类 class ExcelModel extends \yii\base\Model { public $excelFile; public function rules() { return [ [['excelFile'], 'file', 'extensions' => 'xls, xlsx'], ]; } public function upload() { if ($this->validate()) { $this->excelFile->saveAs($this->getFilePath()); return true; } else { return false; } } public function getFilePath() { return Yii::getAlias('@webroot') . '/uploads/' . $this->excelFile->baseName . '.' . $this->excelFile->extension; } } // 处理 Excel 数据的方法 private function processExcelData($filePath) { // 使用 PHPExcel 库读取 Excel 文件 $objPHPExcel = \PHPExcel_IOFactory::load($filePath); $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true); // 处理数据 $excelData = []; foreach ($sheetData as $row) { $rowData = []; foreach ($row as $cell) { $rowData[] = $cell; } $excelData[] = $rowData; } return $excelData; } // 保存 Excel 数据到数据库的方法 private function saveExcelData($excelData) { // 将数据保存到数据库 // ... } 希望这段代码能够帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值