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',],
];
}

  

目录生成:

/**
* 上传图片
* @return string
*/
private function uploadPic()
{
//是否上传图片
//upload
$file_img = '';
$file_name = md5(time());
$path = 'uploads/'.date("Y").'/'.date("m").'/'.date('d').'/';
if (!file_exists($path)) {
$this->createDir($path);
}
if (Yii::$app->request->isPost) {
$model = new WexinUploadForm();
$model->file = UploadedFile::getInstance($model, 'file'); if ($model->file && $model->validate()) {
$back = $model->file->saveAs($path .$file_name. '.' . $model->file->extension);
if($back)
$file_img = $path .$file_name. '.' . $model->file->extension;
}
}
return $file_img;
} /**
* 递归:生成目录
*/
private function createDir($str)
{
$arr = explode('/', $str);
if(!empty($arr))
{
$path = '';
foreach($arr as $k=>$v)
{
$path .= $v.'/';
if (!file_exists($path)) {
mkdir($path, 0777);
chmod($path, 0777);
}
}
}
}

  

最新文章

  1. 移动端web开发
  2. 用shebang编写一个ssh自动登陆脚本
  3. Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
  4. SQL Server join介绍
  5. hdu 4738 Caocao&#39;s Bridges 图--桥的判断模板
  6. CF577B Modulo Sum 好题
  7. 关于Rational Functional Tester (RFT)的简单介绍
  8. 【Java】Java运行cmd命令直接导出.sql文件
  9. 『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
  10. 邮件发送 emailsend .net开发
  11. HDU 4731 Minimum palindrome 2013 ACM/ICPC 成都网络赛
  12. 关于tasklet的一点小小的解释
  13. BotVS开发基础—2.7 指标MA
  14. LINUX 笔记-vmstat命令
  15. ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
  16. java IO(三):字符流
  17. 简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型
  18. 写一个python 爬虫爬取百度电影并存入mysql中
  19. SimInfo获取(MCC, MNC, PLMN)
  20. CF833E Caramel Clouds

热门文章

  1. Java基础语法 - 面向对象 - 局部变量
  2. DOM 综合练习(一)
  3. java 内存空间
  4. 轻松理解MYSQL MVCC 实现机制
  5. Python和数据科学的起步指南
  6. 吴超老师课程---Hadoop的伪分布安装
  7. Sublime : python环境
  8. Spring AOP(1)
  9. 安装 SPRING TOOL SUITE
  10. sem学习