/**
*@Action 文件上传示例
*@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译
*@我们上传的是一个叫 photo 的jpg和png格式的文件

*/

Controller 控制器

<?php
namespace frontend\controllers; use yii\web\UploadedFile; #载入文件上传类
use frontend\models\UploadFile; #引入我们自己的文件上传处理用的model class ThumbController extends \yii\web\Controller
{
/**
*@Action 文件上传示例
*@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译
*@我们上传的是一个叫 photo 的jpg和png格式的文件
*/
public function actionIndex()
{
/**
*@注意:
* 1. 如果控制器做了 validate 的验证那么 model 的上传方法就不要再做 validate 的验证了
* 2. 注意上传的文件的name的命名(我在这里上传的是一个叫photo的文件)
* 3. 如果要在控制器做 validate 的验证则要注意 :
*-------------①.validate的验证必须放在调用model的上传方法之前
*-------------②.我在这里给出一个示例
*---------------------------------------------------------------
*# $model = new UploadForm();
*# if (\Yii::$app->request->isPost)
*# {
*# $model->photo = UploadedFile::getInstance($model, 'photo');
*# if($model->validate() && $path=$model->upload())
*# {
*# echo $path;die; //输出文件路径
*# }
*# else
*# {
*# var_dump($model->getErrors());die;
*# }
*# }
*
*/ /**
*@我在这里推荐一个简易的做法 ↓
*/
$model = new UploadFile();
if (\Yii::$app->request->isPost)
{
$image = $model->photo = UploadedFile::getInstance($model, 'photo');
if ($file_path = $model->upload($image))
{
echo $file_path;die;
return;
}
}
return $this->render('index',[
'model' => $model
]);
}

Models模型层

<?php
namespace frontend\models;
use yii\base\Model;
use yii\web\UploadedFile; #载入文件上传类 class UploadFile extends Model{ public $photo; public function rules()
{
return [
[['photo'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg','wrongExtension'=>'只能上传{extensions}类型文件!'],
];
} /**
*@Action 文件上传
*/
public function upload()
{
if ($this->validate())
{
$rootPath = "uploads/"; //定义上传的根目录
$ext = $this->photo->extension; //获取文件的后缀(*格式*)
$randName = time() . rand(1000, 9999) . "." . $ext; //重新编译文件名称
$path = abs(crc32($randName) % 500); //编译第二层文件夹名称
$rootPath = $rootPath . $path . "/"; //拼接
if (!file_exists($path)){ //判断该目录是否存在
mkdir($rootPath,true);
}
$re = $this->photo->saveAs($rootPath . $randName); //调用内置封装类**执行上传
if($re){
return $rootPath . $randName; //上传成功**返回文件的路径名称
}else{
return false;
}
}
else
{
return false;
}
}
}

VIEWS视图层

<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'photo')->fileInput() ?>
<button>Submit</button>
<?php ActiveForm::end() ?>

YII2.0的文件上传, 并把文件名称重新编译的更多相关文章

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

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

  2. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

  3. struts文件上传(多文件)

    第01步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  4. skymvc文件上传支持多文件上传

    skymvc文件上传支持多文件上传 支持单文件.多文件上传 可以设定 文件大小.存储目录.文件类型 //上传的文件目录 $this->upload->uploaddir="att ...

  5. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  6. 使用PHP实现文件上传和多文件上传

    PHP 2013 年 9 月 4 日 暂无评论 在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在PHP中实现文件上传功能要比在Java.C#等语言 ...

  7. Struts1文件上传、单文件、多文件上传【Struts1】

     将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘: Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/d ...

  8. (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

    文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个表单页面(这里使用thymleaf); (4)编写controlle ...

  9. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  10. NetCore3.0 文件上传与大文件上传的限制

    NetCore文件上传两种方式 NetCore官方给出的两种文件上传方式分别为“缓冲”.“流式”.我简单的说说两种的区别, 1.缓冲:通过模型绑定先把整个文件保存到内存,然后我们通过IFormFile ...

随机推荐

  1. JAVA设计模式及其设计原则

    设计模式: 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 单例模式:在一个jvm虚拟机,要创建的对象控制成独一份:举例:统计单台虚拟机内的用户在线数 package ...

  2. Java 实现汉字按照首字母分组排序

    一.实现思路: 1.将数据list 进行排序Collections,排序后是按照汉字字母排序的 2.循环找出26个字母,以字母为key,以list中相同首字母的数据为值(集合) 二.代码实现: // ...

  3. vue引入多个指令文件

    单个指令引入,在main.js(入口JS文件)中引入你已经写好的指令文件,可以省略文件后缀: // main.js import focus from 'xxx/directive'多个指令引入 Vu ...

  4. DB help

    using Dapper; using System; using System.Collections; using System.Collections.Generic; using System ...

  5. Mac 系统下 xxx.py 在终端运行

    1.在文件中添加注释首先在你所要运行的python文件里首行添加一个特殊的注释(我使用的是python 3.7.3) #!/usr/bin/env python3 注意:如果是python3的话,&q ...

  6. 从babel编译结果分析class的实现原理

    示例: class A { // 属性表达式 prop1 = 1; // get方法 get value() { console.log('Getting the current value!'); ...

  7. python list dict util (分割,分组)

    1.list数据分割为多个小列表  (java   lists.partition) 2. 分组 import itertools def partition(mylist, size): " ...

  8. python调用方法或者变量时出现未定义异常的原因,可能会是没有正确实例化

    当引用某个某块时 例如 Testpython import test class test(object): def __init__(): -- self.mimi = test def test1 ...

  9. 使用 Agora 为Android APP添加视频直播

    add-live-streaming-to-your-android-app-using-agora-featured1024×512 121 KB 视频互动直播是当前比较热门的玩法,我们经常见到有P ...

  10. 咕咕list

    做完以后会留在榜上一天,这样显得咕咕list长一些 CF666E Forensic Examination(done on 2023.2.6) dp选做