YII2.0的文件上传, 并把文件名称重新编译
/**
*@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的文件上传, 并把文件名称重新编译的更多相关文章
- yii2.0单文件上传和多文件上传
yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规 ...
- 强大的支持多文件上传的jQuery文件上传插件Uploadify
支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...
- struts文件上传(多文件)
第01步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...
- skymvc文件上传支持多文件上传
skymvc文件上传支持多文件上传 支持单文件.多文件上传 可以设定 文件大小.存储目录.文件类型 //上传的文件目录 $this->upload->uploaddir="att ...
- SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...
- 使用PHP实现文件上传和多文件上传
PHP 2013 年 9 月 4 日 暂无评论 在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在PHP中实现文件上传功能要比在Java.C#等语言 ...
- Struts1文件上传、单文件、多文件上传【Struts1】
将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘: Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/d ...
- (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】
文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个表单页面(这里使用thymleaf); (4)编写controlle ...
- SpringMVC文件上传下载(单文件、多文件)
前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...
- NetCore3.0 文件上传与大文件上传的限制
NetCore文件上传两种方式 NetCore官方给出的两种文件上传方式分别为“缓冲”.“流式”.我简单的说说两种的区别, 1.缓冲:通过模型绑定先把整个文件保存到内存,然后我们通过IFormFile ...
随机推荐
- 几行python代码完美操控手机
最近一直成谜于python代码带来的便利,今天打算学习下用python代码来控制操作手机,首先需要利用adb,通过安卓调试桥来达到目的,其实也可以用appium来实现,不过appium多数用在自动化测 ...
- 导入ssm项目时,项目基本的配置文件
一.ssm框架基本的配置文件 上面的这些配置文件对于比较简单的ssm项目其实大同小异,逻辑上是差不多的. 在config目录下 在lib下就是各种jar包 二.导入ssm项目后,本地环境配置和项目本身 ...
- jetson TX2 + opencv3.4 + python3 + 双目 +人脸检测
淘宝看到一款很便宜的双目,150元,就买了.想着用它学习一下opencv,好换个工作.当然,也想着能否用它做一些好玩的,比如三维重建之类高大上的东西.先用便宜的入个门,等以后眼界高了再看是不是买那些更 ...
- 基于Nginx以及web服务器搭建在线视频播放
安装Nginx Nginx官网下载地址 网址打开后如图 下载windows版本的Nginx,这里下载最新的1.18.0版本 Nginx在windows下的安装只需要将其解压缩即可.建议将解压后的目录移 ...
- 油猴CSDN净化脚本
CSDN版面越来越乱,最近还总是弹出红包雨和顶部巨大横幅,左侧也会随机出现学生认证弹窗.而且版面混乱难看,看起来非常费劲. 另外底下的推荐列表经常夹杂着CSDN文件下载的链接,下载文件又要付费,从来不 ...
- centos虚拟机yum update报错Another app is currently holding the yum lock; waiting for it to exit...
1.运行yum update报错 [root@localhost ~]# yum update已加载插件:fastestmirror, langpacks/var/run/yum.pid 已被锁定,P ...
- JSON反序列化接口的问题
今天在使用JSON序列化类时出现问题,原来类中有一个接口,在反序列化时不知道接口的实体是什么 public class Device : IComparer { private str ...
- springboot后端接收不到前端传来的表单值
为啥接收不到 因为传来的字段值太大了,springboot默认启动依赖tomcat,tomcat默认接收表单值最大为2MB,将server.tomcat.max-http-form-post-size ...
- Python第五章实验报告
一.实验项目名称:<零基础学Python>第五章实战.实例以及两道作业题 二.实验目的和要求:了解和掌握操作字符串的方法和正则表达式的应用 三.实验环境:IDLE(Python 3.9 6 ...
- mysql 以自增id等于某个random()函数算出的值为条件查出两条数据
SELECT id FROM users WHERE id = FLOOR( rand() * ( (SELECT max(id) FROM users) - (SELECT min(id) FROM ...