YII2.0的文件上传, 并把文件名称重新编译

来源:互联网 发布:闪电下单软件 编辑:程序博客网 时间:2024/06/01 08:03
/**
*@Action 文件上传示例
*@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译
*@我们上传的是一个叫 photo 的jpg和png格式的文件

*/

Controller 控制器

<?phpnamespace frontend\controllers;use yii\web\UploadedFile;#载入文件上传类use frontend\models\UploadFile;#引入我们自己的文件上传处理用的modelclass ThumbController extends \yii\web\Controller{/***@Action 文件上传示例*@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译*@我们上传的是一个叫photo 的jpg和png格式的文件*/    public function actionIndex()    {/***@注意:* 1. 如果控制器做了 validate 的验证那么 model 的上传方法就不要再做 validate 的验证了* 2. 注意上传的文件的name的命名(我在这里上传的是一个叫photo的文件)* 3. 如果要在控制器做 validate 的验证则要注意 : *-------------①.validate的验证必须放在调用model的上传方法之前 *-------------②.我在这里给出一个示例*---------------------------------------------------------------*#$model = new UploadForm();        *#if (\Yii::$app->request->isPost) *#{        *#$model->photo = UploadedFile::getInstance($model, 'photo');*#if($model->validate()  && $path=$model->upload())*#{*#echo $path;die;//输出文件路径*#}*#else*#{*#var_dump($model->getErrors());die;*#}*#}        **//***@我在这里推荐一个简易的做法 ↓*/$model = new UploadFile();if (\Yii::$app->request->isPost) {            $image = $model->photo = UploadedFile::getInstance($model, 'photo');            if ($file_path = $model->upload($image)){                echo $file_path;die;                return;            }        }return $this->render('index',['model' => $model]);    }

Models模型层

<?phpnamespace frontend\models;use yii\base\Model;use yii\web\UploadedFile; #载入文件上传类class UploadFile extends Model{        public $photo;public function rules()    {        return [            [['photo'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg','wrongExtension'=>'只能上传{extensions}类型文件!'],        ];    } /***@Action 文件上传*/public function upload()    {if ($this->validate()){$rootPath = "uploads/";//定义上传的根目录$ext = $this->photo->extension;//获取文件的后缀(*格式*)$randName = time() . rand(1000, 9999) . "." . $ext;//重新编译文件名称            $path = abs(crc32($randName) % 500);//编译第二层文件夹名称            $rootPath = $rootPath . $path . "/";//拼接            if (!file_exists($path)){//判断该目录是否存在                mkdir($rootPath,true);            }            $re = $this->photo->saveAs($rootPath . $randName);//调用内置封装类**执行上传            if($re){return $rootPath . $randName;//上传成功**返回文件的路径名称}else{return false;}        }else{            return false;        }}}

VIEWS视图层

<?phpuse yii\widgets\ActiveForm;?><?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>    <?= $form->field($model, 'photo')->fileInput() ?>    <button>Submit</button><?php ActiveForm::end() ?>



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 有痔疮肛门很痛怎么办 这几天痔疮犯了怎么办 孕初期肛裂出血怎么办 胃疼怎么办怎么缓解胃 脚踝崴了肿了怎么办 脚扭了脚背肿了怎么办 儿童脚扭伤肿了怎么办 脚关节扭伤肿了怎么办 小孩脚扭伤肿了怎么办 抱小孩腰扭伤了怎么办 跳舞把腰拉伤了怎么办 脚不小心扭伤了怎么办 娱乐之太帅了怎么办txt 走路走多了脚痛怎么办 胃疼怎么办简单按摩法 经常胃疼的厉害怎么办 半夜胃疼的厉害怎么办 吃消炎药伤胃了怎么办 吃药伤胃了胃疼怎么办 宝宝吃药伤胃了怎么办 胃胀胃痛怎么办快速解决方法 半夜2点3点胃疼怎么办 晚上吃多了胃疼怎么办 骨折打石膏后痒怎么办 脚脖子崴了肿了怎么办 喝酒喝的吐血了怎么办 感冒后咳嗽有痰怎么办 嗓子里老是有痰怎么办 物业把水停了怎么办 机洗衬衫缩水了怎么办 羊绒大衣洗缩水了怎么办 棉质衣服缩水了怎么办 衣服洗了变小了怎么办 毛衣洗后缩水了怎么办 鼻子又大又塌怎么办 苹果6被停用了怎么办 苹果6s手机停用怎么办 苹果4手机已停用怎么办 苹果手机5停用了怎么办 老公被骗300多万怎么办 苹果手机被抹除怎么办