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 ...
随机推荐
- openvas在centos中扫描单项的python实现
使用gvm_cli命令来实现 先创建一个空的配置 copy_id = '085569ce-73ed-11df-83c3-002264764cea' new_config = ''' <creat ...
- 【.NET】Swagger 允许接口重名
问题: Swagger Failed to load API definition. 相信用过swagger的小伙伴 一定经历过这样的错误,问题点很简单,是接口重名了. 我百度了一下,找不到答案. 谷 ...
- C++11的override、default和delete关键字
最近在参与组里的项目时接触了很多以前自己没太了解的C++语法(尤其是C++11以后出现的),今天给大家讲一下C++11新出的override和default关键字. override关键字主要在声明类 ...
- 剑指offer----1.二维数组查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- cmake使用boost静态库,错误提示 Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least version "1.48")
使用的是Cmake-gui 编译. 问题出在C盘路径下找不到 Boost ,是否需要把boost的路径添加到系统Path 中? 任然不能解决. 更改源码: 找到下面这几行代码(你可以搜索) messa ...
- 三种遍历的方法(map和forEach的区别)
一. for循环 arr[index]可以改变原数组 二. forEach方法 forEach方法的返回值是一个undefined: 2. 在循环体内改变item的值不会影响原数组,而是只在循环体内生 ...
- day48-Mysql安装文件结构及SQL常用语句
1.安装文件结构 bin--mysql.exe 客户端运行程序: mysqld.exe 服务端运行程序: data--数据库.数据表等文件 注:修改配置文件后需要重启服务端 2.常用SQL语句 1) ...
- mysql error Code 1441:datetime function: datetime field overflow
mysql error Code 1441:datetime function: datetime field overflow 网上找了好久,也没有解决 最后发现有个left join 表,on关 ...
- 在app中如何使weib-view不铺满全屏,自适应页面
// #ifdef APP-PLUS //自建webview var currentWebview = this.$scope.$getAppWebview(); var height = this. ...
- win10_pyhive链接hive失败,提示:Could not start SASL
win10_pyhive链接hive失败,提示:Could not start SASL https://blog.csdn.net/weixin_45684985/article/details/1 ...