yii2.0实现文件上传
来源:互联网 发布:学习数据库系统工程师 编辑:程序博客网 时间:2024/06/05 19:57
本文档教授大家在yii2.0里实现文件上传 首先我们来实现单文件上传
第一步 首先建立一个关于上传的model层 如果你有已经建好的可以使用表单小部件的model层 也可以直接用这个。在这里我们新建一个新的model层
在model层新建文件 Upload.php
<?phpnamespace frontend\models;use yii\base\Model;use yii\widgets\ActiveForm;use yii\helpers\Html;use yii\web\UploadedFile;class Upload extends Model{ public $file; public function rules(){ return [ ]; } public function attributeLabels(){ return[ 'file'=>'文件上传', ]; }}
第二步 在控制器层,引用我们刚刚创建好的这个model 在这里我 们使用一个已经创建好的控制器。复习一下怎么在一个控制器里使用两个或者两个以上的model
首先在我们的控制器里边 使用我们刚刚创建的model
use frontend\models\Upload;
然后新建一个方法 实现model层和view层的连接
public function actionUpload(){ $up = new Upload(); return $this->render('upload',['model'=>$up]); }
然后新建视图层
<?phpuse yii\widgets\ActiveForm;?><?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data'], 'action'=>'?r=index/doupload', 'method'=>'post',])?><?= $form->field($model, 'file')->fileInput() ?> <button>Submit</button><?php ActiveForm::end() ?>
下一步 试图层创建好以后 就可以写文件上传的代码了
在这里因为我们定义了把文件上传到index/doupload 这个方法里
所以我们在控制器里新建一个doupload的方法
在这里要注意 因为我们使用了上传类 所以需要use一下这个上传类
use yii\web\UploadedFile; public function actionDoupload(){ if (Yii::$app->request->isPost) { $model = new Upload(); $model->file = UploadedFile::getInstance($model, 'file'); if ($model->file && $model->validate()) { $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension); } }
现在已经实现了文件上传 但是要注意 如果报下边的错误
move_uploaded_file(uploads/1501PHPA 考试信息.xlsx): failed to open stream: No such file or directory
默认情况下只需要在入口文件同级的目录下 新建一个文件夹 uploads
下边 我们实现多文件 上传 只需要稍微坐下修改
首先修改views 让表单小部件 支持多文件
<?= $form->field($model, 'file[]')->fileInput(['multiple' => true]) ?>
接下来修改下控制器中的上传代码 让我们的控制器也支持多文件 就可以了
public function actionDoupload(){ /*if (Yii::$app->request->isPost) {*/ $model = new Upload(); /*$model->file = UploadedFile::getInstance($model, 'file'); if ($model->file && $model->validate()) { $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension); }*/ if (Yii::$app->request->isPost) { $model->file = UploadedFile::getInstances($model, 'file'); if ($model->file && $model->validate()) { foreach ($model->file as $file) { $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension); } } }
Ok 文件上传 就完成了
如果想要限制文件大小
第一种方法 在我们的规则里边进行限制
public function rules(){ return [ [['file'],'file','maxSize'=>1024*200,'minSize'=>1024*20] ]; }
以上就是限制文件上传最大值是20kb
但是 以上的限制是通过js实现的 当我们禁用js后 就会有很大的危险 所以 还有添加 后台的验证 这里只做了尺寸大小的验证
修改了上传部分的代码
public function actionDoupload(){ if (\Yii::$app->request->isPost) { $model = new Upload(); $model->file = UploadedFile::getInstance($model, 'file'); $filesize = $model->file->size; $maxsize = 1024*200; $minsize = 1024*20; if($filesize>$maxsize || $filesize<$minsize){ die("size is wrong"); } if ($model->file && $model->validate()) { $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension); } }}
- yii2.0实现文件上传
- Yii2.0文件上传
- yii2.0 文件上传
- yii2框架实现文件上传
- yii2.0表单上传文件
- yii2.0多文件上传
- Yii2.0-单文件上传
- Yii2.0-多文件上传
- Yii2.0-文件上传操作类-UploadedFile
- Yii2上传文件
- yii2文件上传
- yii2的文件上传
- yii2文件上传
- yii2文件上传
- yii2 文件上传
- yii2 文件上传
- Yii2 上传文件
- Yii2文件上传
- 第十一讲 使用注解开发
- vue.js使用注意事项
- android 自定义Dialog
- LDD3源码分析之按页分配内存
- JAVA时间格式化处理
- yii2.0实现文件上传
- Python2.7 pip编码错误UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in解决方法
- 关于WebView加载URL时显示一片空白的问题
- C# Parallel 并行计算测试
- linux之debian安装php7与php5共存nginx
- iptables防火墙的启动、停止以及开启关闭端口的操作
- spring mvc 编译的jar包,部署为windows 服务
- ROM界面美化基础(framework-res、SystemUI)
- Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式