yii2框架中上传单(多)文件
2018-03-13 16:45
120 查看
1、单个文件上传
首先建立一个模型models/UploadForm.php,内容如下namespace app\models; use yii\base\Model; use yii\web\UploadedFile; /** * UploadForm is the model behind the upload form. */ class UploadForm extends Model { /** * @var UploadedFile file attribute */ public $file; /** * @return array the validation rules. */ public function rules() { return [ [['file'], 'file'], ]; } }再建立一个视图文件,内容如下
<?php use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'file')->fileInput() ?> <button>Submit</button> <?php ActiveForm::end() ?>最后建立控制器文件,内容如下
namespace app\controllers; use Yii; use yii\web\Controller; use app\models\UploadForm; use yii\web\UploadedFile; class SiteController extends Controller { public function actionUpload() { $model = new UploadForm(); if (Yii::$app->request->isPost) { $model->file = UploadedFile::getInstance($model, 'file'); if ($model->file && $model->validate()) { $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension); } } return $this->render('upload', ['model' => $model]); } }注意这里我们没有用model->load(...),而是用了UploadedFile::getInstance(...)。区别是后者不会执行$model->validate(),所以需要手动的去执行$model->validate()来检验数据的合法性。如果检验通过了,上传的文件保存在uploads文件夹下,即web目录下的uploads里。一些可选的配置选项
上传文件不能为空
public function rules() { return [ [['file'], 'file', 'skipOnEmpty' => false], ]; }上传类型,不仅可以根据扩展名检验,还可以根据文件的内容进行检验
public function rules() { return [ [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',], ]; }
2、多文件上传
如果你想一次上传多个文件,只需调节几个参数就可以达到目的Model:class UploadForm extends Model { /** * @var UploadedFile|Null file attribute */ public $file; /** * @return array the validation rules. */ public function rules() { return [ [['file'], 'file', 'maxFiles' => 10], // <--- here! ]; } }View:
<?php use yii\widgets\ActiveForm; $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> <?= $form->field($model, 'file[]')->fileInput(['multiple' => true]) ?> <button>Submit</button> <?php ActiveForm::end(); ?>与单文件上传不同的是下面这句
$form->field($model, 'file[]')->fileInput(['multiple' => true])Controller:
namespace app\controllers; use Yii; use yii\web\Controller; use app\models\UploadForm; use yii\web\UploadedFile; class SiteController extends Controller { public function actionUpload() { $model = new UploadForm(); 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); } } } return $this->render('upload', ['model' => $model]); } }
这样就可以实现多文件上传了。 参考https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md
相关文章推荐
- YII2框架学习 安全篇(五) 文件上传漏洞
- Volley 网络框架实现文件上传
- 基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
- SSM(Spring+SpringMVC+Mybatis)框架文件上传
- JavaWeb框架-SpringMVC-4-文件上传与返回JSON数据
- .NET快速信息化系统开发框架 V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能
- yii2使用七牛上传图片文件
- yii2 单文件上传和多文件上传
- CI框架PHPExcel上传文件
- struts2文件上传修改为cos框架处理一系列事情
- 常用的有关文件上传下载的框架和图片加载框架
- php上传zip文件在线解压文件在指定目录下,CI框架版本
- 在struts1.1框架下,利用smartupload实现文件的上传(可以是多个文件)
- Java三大框架之struts的上传文件出错信息配置(允许上传的类型,上传文件的大小,以及大文件上传说明等等)
- Android引用开源框架通过AsyncHttpClient实现文件上传
- AFNetworking框架_上传文件或图片…
- 找呀志_通过开源框架引AsyncHttpClient上传文件
- SSM框架之中如何进行文件的上传下载
- node.js express框架文件上传路径
- yii2文件上传