/**
*@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. Linux 格式化 挂载 Gdisk

    对磁盘进行格式化mkfs 创建文件系统 xfs ext4/2/3 mkfs -b 设定数据区块(block)占用空间大小,目前支持1024.2048.4096 bytes每个块.默认4K mkfs - ...

  2. 6vue分支循环

    分支v-if <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. FCC 中级算法题 Binary Agents

    Binary Agents 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. String.charCodeAt() String.fromCharCode() 思路: (1)把 ...

  4. Ubuntu解决无法远程连接

    检查SSH是否安装 ssh localhost 如果没有安装,通过APT的命令安装 sudo apt install openssh-server 无法连接Ubuntu中的root用户 其他用户可以连 ...

  5. 奇怪的 document.body.onscroll

    打开开发者工具, 滚动下面示例页面 See the Pen document.body.onscroll vs document.body.addEventListener('scroll', ... ...

  6. 转载:VMware Esxi开通SSH功能

    转载:https://www.cnblogs.com/dsl146/p/13739953.html ESXi 5.5是直接安装在物理主机上的一个虚拟机系统,本质上是一个Linux系统.平时可以通过VM ...

  7. xcodeproj Building for iOS, but the linked and embedded framework ‘xxx.framework’ was built for iOS + iOS Simulator.

    一.报错 报错内容大致如下 /xxxx/xxx.xcodeproj Building for iOS, but the linked and embedded framework 'xxx.frame ...

  8. 测试环境docker化实践

    测试环境对于任何一个软件公司来讲,都是核心基础组件之一.测试环境伴随着发展也从单一的几套环境发展成现在的任意的docker动态环境+docker稳定环境环境体系.期间环境系统不断的演进,去适应集群扩张 ...

  9. Visual Studio-截断类错误

    Visual Studio-截断类错误 传输数据的目标端,将提示的错误的表对应的截断字段的长度增大,重新创建表 并且,对于Visual 传输节点里面,双击红色报错的节点,然后对于数据源右键,接着选择& ...

  10. mysql统计特定字符串出现次数

    其中'test'为原始字符串,'t'为特定字符串   SELECT floor((char_length('test') - char_length(replace('test', 't', '')) ...