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);
}
}
}
}

  

yii2: 上传图片,生成目录的更多相关文章

  1. 利用office2010 word2010生成目录

    详细内容可以从以下链接下载: http://www.360disk.com/file-37040.html 从前一直用word的目录功能,觉得很方便.第一:可以在目录的首页通过Ctrl+鼠标单击左键可 ...

  2. Word自动生成目录

    博主最近在写报告的时候要在Word里面做个目录,再做个页码,然后上网搜了一些方法,非常零散,我弄了好久才弄好.在这里我把整套方法分享一下. 声明:内容完全独创! 工具:Word 2016. 效果:如下 ...

  3. EXCLE使用宏生成目录

    宏代码: Sub mu() Dim i As Integer Dim ShtCount As Integer Dim SelectionCell As Range ShtCount = Workshe ...

  4. word 生成目录

    生成目录: (1)Ctrl+End,到达文档的最后一页: (2)"插入"菜单--引用--索引和目录(此时出现索引和目录对话框): (3)单击"目录"选项卡 a. ...

  5. paip.tree 生成目录树到txt后的折叠查看

    paip.tree 生成目录树到txt后的折叠查看 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.ne ...

  6. Java生成目录

    Java生成目录 1.说明 推断目录是否存在,假设不存在就创建该目录.并打印其路径.假设存在,打印其路径 2.实现源代码 /** * @Title:BuildFolder.java * @Packag ...

  7. markdownpad生成目录

    生成目录 document.addEventListener("DOMContentLoaded", function() { // 生成目录列表 var outline = do ...

  8. 为Markdown文件生成目录

    缘由 思路 效果 代码实现 缘由 Markdown源生文件源生不支持目录,目前比较主流的生成目录的方式(各式插件),都是转化为HTML文件.虽然HTML文件可以生成眼花缭乱的目录,但是修改起来又没有M ...

  9. 使用dotnet build时复制引用dll到生成目录

    默认配置下dotnet build只会输出项目代码的dll,依赖用的是dotnet缓存中的dll,只有dotnet publish才会把依赖的dll一起输出到生成目录. 在项目csproj文件中添加以 ...

随机推荐

  1. 转+总结!! maven的package与install命令区别

    如果b项目依赖a项目,而a打了包(package),jar仅仅时打到了a项目的target下.这时编译b项目,还是会报错,找不到所依赖的a项目,说明b项目在本地仓库是没有找到它所依赖的a项目. 然后, ...

  2. python项目环境的导出、导入

    导出开发环境 pip freeze > requirements.txt # 文件导出路径 导入环境 pip install -r requirements.txt # pip 则会自动下载安装 ...

  3. tomcat 配置文件 介绍

    [root@mysql logs]# cd ../conf/ [root@mysql conf]# ll总用量 228drwxr-x---. 3 root root 4096 11月 15 2018 ...

  4. 两款高性能并行计算引擎Storm和Spark比較

    对Spark.Storm以及Spark Streaming引擎的简明扼要.深入浅出的比較,原文发表于踏得网. Spark基于这种理念.当数据庞大时,把计算过程传递给数据要比把数据传递给计算过程要更富效 ...

  5. Selenium WebDriver 工作原理

    WebDriver与之前Selenium的js注入实现不同:Selenium通过JS来定位元素处理元素(基本上所有元素都可以定位到)WebDriver通过WebDriver API定位处理元素:通过浏 ...

  6. go——工程结构

    Go是一门推崇软件工程理念的编程语言,它为开发周期的每个环节都提供了完备的工具和支持. Go语言高度强调代码和项目的规范和统一,这几种体现在工程结构或者说代码体制的细节之处. 1.工作区 一般情况下, ...

  7. 访问url

    你可以通过 args 属性来访问 URL 中提交的参数 ( ?key=value ): searchword = request.args.get('q', '') from flask import ...

  8. BOM对象,math对象document对象的属性和操作和 事件的基本操作

    Math对象 //该对象中的属性方法 和数学有关. abs(x) 返回数的绝对值. exp(x) 返回 e 的指数. floor(x) 对数进行下舍入. log(x) 返回数的自然对数(底为e). m ...

  9. LeetCode:全排列II【47】

    LeetCode:全排列II[47] 参考自天码营题解:https://www.tianmaying.com/tutorial/LC47 题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列 ...

  10. msys2安装开发工具

    pacman -Syupacman -Supacman -S base-develpacman -S mingw-w64-x86_64-toolchain