首先在app\controllers下建立TestController.php,内容为如下代码:

 <?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\Upload;
use yii\web\UploadedFile; class TestController extends Controller
{
public function actionUpload()
{
$model = new Upload();
if (Yii::$app->request->isPost) {
$file = UploadedFile::getInstance($model, 'file');
$path="uploads/".date("YmdH",time())."/";
if ($file && $model->validate()) {
if (!file_exists($path)) {
mkdir($path,0777, true);
}
$file->saveAs($path . time() . '.' . $file->getExtension());
Yii::$app->session->setFlash('success', '上传成功!');
}
}
return $this->render('upload', ['model' => $model]);
}
}

需要注意的是,当app\web下面没有uploads文件夹时,需要建立,在上述代码中,建立的存储图片的文件夹为 "uploads/".date("YmdH",time())."/" ,因为存在层级目录,所以在使用mkdir()函数的时候,括号内的最后一个参数true必须要填,如果不填,则是代表建立的目录只有一个层级,如 "uploads/" ,这时就不能加上后面的以时间为下一层级的目录了。上述使用mkdir()函数建立的文件夹在app\web下。其中 Yii::$app->session->setFlash('success', '上传成功!'); 是当图片上传成功后,传递上传成功的提示在view里面显示。

app\models下建立Upload.php,代码如下:

 <?php
namespace app\models;
use Yii;
use yii\base\Model; class Upload extends Model{
public $file;
public function rules(){
return [
[['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
];
}
public function attributeLabels(){
return [
'file'=>'文件上传'
];
}
}

然后在views下建立test\upload.php,代码如下:

 <?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<?php if(Yii::$app->session->hasFlash('success')):?>
<div class="alert alert-danger">
<?=Yii::$app->session->getFlash('success')?>
</div>
<?php endif ?>
<?php $form=ActiveForm::begin([
'id'=>'upload',
'enableAjaxValidation' => false,
'options'=>['enctype'=>'multipart/form-data']
]);
?>
<?= $form->field($model, 'file')->fileInput();?>
<?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
<?php ActiveForm::end(); ?> </body>
</html>

其中

 <?php if(Yii::$app->session->hasFlash('success')):?>
<div class="alert alert-danger">
<?=Yii::$app->session->getFlash('success')?>
</div>
<?php endif ?>

就是当图片上传成功后,显示从Testcontroller中传过来的参数。

Yii2文件上传的更多相关文章

  1. [YII2] 文件上传类

    //测试文件上传类 public function actionCreate() { $model = new Lvyou(); $upload_model = new \app\models\Upl ...

  2. yii2 文件上传

    直接贴代码了 --------------------------------------------------------------------------------------------- ...

  3. yii2.0单文件上传和多文件上传

    yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规 ...

  4. YII2.0上传文件

    针对于YII2.0官方手册来说,我稍微修改了一些内容具体的就是把model层里定义的uoload方法在controller方法里合并了 创建模型 namespace app\models; use y ...

  5. Yii2表单提交(带文件上传)

    今天写一个php的表单提交接口,除了基本的字符串数据,还带文件上传,不用说前端form标签内应该有这些属性 <form enctype="multipart/form-data&quo ...

  6. Yii2 UploadedFile上传文件

    通过 UploadFile::getInstance($model, $attribute); UploadFile::getInstances($model, $attribute); Upload ...

  7. 本文档教授大家在yii2.0里实现文件上传 首先我们来实现单文件上传

    第一步  首先建立一个关于上传的model层  如果你有已经建好的可以使用表单小部件的model层 也可以直接用这个.在这里我们新建一个新的model层 在model层新建文件  Upload.php ...

  8. iframe 模拟ajax文件上传and formdata ajax 文件上传

    对于文件上传 有好多种方式,一直想总结 文件上传的方法 今天就来写下 iframe  的文件上传的代码 本人语言表达能里有限,不多说了 直接上代码. 首先看 总体页面. 总共就三个文件. 实际上也就是 ...

  9. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

随机推荐

  1. sersync实现触发式同步

    金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步 Inotify 是基于inode级别的文件系统监控技术,是一种强大的.细粒度的. ...

  2. MySQL Replication浅析

    MySQL Replication是MySQL非常出色的一个功能,该功能将一个MySQL实例中的数据复制到另一个MySQL实例中.整个过程是异步进行的,但由于其高效的性能设计,复制的延时非常小.MyS ...

  3. Codeforces 735D:Taxes(哥德巴赫猜想)

    http://codeforces.com/problemset/problem/735/D 题意:给出一个n,这个n可以分解成 n = n1 + n2 + -- + nk,其中k可以取任意数.要使得 ...

  4. 再谈自主开发与企业IT管理

    前两天写<自主开发与带兵打仗>分析了一下自主开发的利与弊,得到了园内不少朋友的反馈,但我觉得还有很多东西没有交待清楚,可能有很多朋友也跟我一样在公司的IT部门,有自己的研发团队也有很多外购 ...

  5. 跟我一起Django - 01 安装和初始化

    跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...

  6. C++陷阱之慎用string类

    我们知道,string类为我们提供了很多的便利,我们用string类能方便的做字符串的各种操作,避免了我们直接操作char指针而产生的一些繁琐的操作,和内存泄露的可能性,可是string类也是有陷阱的 ...

  7. HDU(2485),最小割最大流

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2485 Destroying the bus stations Time Limit: 40 ...

  8. 对“Java”的诞生历史、特点、定义等HR常问的简单题

    本人是一个学习Java的新手,在学习了Java以后,对Java的一些总结. 这里共有12点对Java的简单的阐述,如果解释的不怎么样请大家谅解哈. 1.首先我们来看一看,在Java之前的有那些打牌语言 ...

  9. 2016年11月26日 星期六 --出埃及记 Exodus 20:17

    2016年11月26日 星期六 --出埃及记 Exodus 20:17 "You shall not covet your neighbor's house. You shall not c ...

  10. 2016年6月28日 星期二 --出埃及记 Exodus 14:25

    2016年6月28日 星期二 --出埃及记 Exodus 14:25 He made the wheels of their chariots come off so that they had di ...