yii2.0 文件上传
Yii 2.0 出来好长时间了,一直都是看下官方网站,没实践过,今天弄了下图片上传操作。
1创建一个简单的数据表
mysql> desc article;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(60) | NO | MUL | NULL | |
| image | varchar(100) | NO | | NULL | |
| content | text | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
数据表结构很简单:自增ID,文章标题,文章缩略图,文章内容。
2使用Gii生成一个文章表的Model,再生成一个CURD.
gii确实是很好用的工具,简单快速,具体教程可参考下面链接地址。
地址:http://www.yiichina.com/guide/2/start-gii
3 修改模板文件
修改_form.php(添加和修改模板文件公用)
<div class="article-form">
<?php
$form = ActiveForm::begin([
'id' => "article-form",
'enableAjaxValidation' => false,
'options' => ['enctype' => 'multipart/form-data'],
]);
?>
<?= $form->field($model, 'title')->textInput(['maxlength' => 60]) ?>
<?= $form->field($model, 'image')->fileInput() ?>
<?= $form->field($model, 'content')->textarea(['rows' => 6]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
上面代码中,需要注意的就是ActiveForm::begin()方法里面制定的options选项。
参考文件为:yii2\basic\vendor\yiisoft\yii2\widgets\ActiveForm.php,打开看下就明白,指定的选项也就是该类下的静态属性。
4 修改控制器方法
$model = new Article();
$rootPath = "uploads/";
if (isset($_POST['Article'])) {
$model->attributes = $_POST['Article'];
$image = UploadedFile::getInstance($model, 'image');
$ext = $image->getExtension();
$randName = time() . rand(1000, 9999) . "." . $ext;
$path = abs(crc32($randName) % 500);
$rootPath = $rootPath . $path . "/";
if (!file_exists($path)) {
mkdir($rootPath,true);
}
$image->saveAs($rootPath . $randName);
$model->image = $rootPath.$randName; if ($model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
该action中,首先调用UploadedFile::getInstance(),返回一个实例化对象。
通过getExtension()获取文件后缀名,然后随机生成一个文件名,即$randName。
然后为了多目录存储,使用了crc32函数。
最后直接调用saveAs()方法保存文件。
至此大功告成。
参考文件:yii2\basic\vendor\yiisoft\yii2\web\UploadedFile.php
ps:最后Yii 2.0使用了php新版本命名空间等,控制器文件头部记得use下就ok了。
yii2.0 文件上传的更多相关文章
- Servlet3.0文件上传
Servelt3.0文件上传作为一种便捷的文件上传方式很是值得我们去应用的 1.Servlet3.0文件上传使用步骤 浏览器端的要求 表单的提交方法必须是post 必须有一个文件上传组件 <in ...
- PHPcms v9.6.0 文件上传漏洞
title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...
- 【代码审计】UKCMS_v1.1.0 文件上传漏洞分析
0x00 环境准备 ukcms官网:https://www.ukcms.com/ 程序源码下载:http://down.ukcms.com/down.php?v=1.1.0 测试网站首页: 0x0 ...
- java servlet 3.0文件上传
在以前,处理文件上传是一个很痛苦的事情,大都借助于开源的上传组件,诸如commons fileupload等.现在好了,很方便,便捷到比那些组件都方便至极.以前的HTML端上传表单不用改变什么,还是一 ...
- servlet3.0文件上传与下载
描述:文件上传与下载是在JavaEE中常见的功能,实现文件上传与下载的方式有多种,其中文件上传的方式有: (1)commons-fileupload: (2)Servlet 3.0 实现文件上传 (3 ...
- Android Retrofit 2.0文件上传
Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传 使用Retrofit进行文件上传,肯定离不开Part & PartMap. public interface ...
- NetCore3.0 文件上传与大文件上传的限制
NetCore文件上传两种方式 NetCore官方给出的两种文件上传方式分别为“缓冲”.“流式”.我简单的说说两种的区别, 1.缓冲:通过模型绑定先把整个文件保存到内存,然后我们通过IFormFile ...
- yii2.0 图片上传(摘录)
文章来源:http://blog.sina.com.cn/s/blog_88a65c1b0101izmn.html 下面小伙就带领大学学习一下 Yii2.0 的图片上传类的使用,还是老样子,如果代码样 ...
- yii2.0图片上传
在根目录下夹uploads文件夹 控制器 UploadController.php <?php namespace frontend\controllers; use Yii; use fron ...
随机推荐
- hadoop得知;datajoin;chain署名;combine()
hadoop一种简化机制来管理job和control作业之间的非线性依赖,job对象mapreduce表明. job该目的是通过使实例化jobconf对象的构造函数的工作落实. x.addDeopen ...
- paramiko socket.error: Int or String expected
paramiko socket.error: Int or String expected paramiko的环境: Python 2.6.6 paramiko==1.14.0 正常的paramiko ...
- HDFS副本放置策略和机架感知
副本放置策略 的副本放置策略的基本思想是: 第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的.当然系统会尝试不选择哪些太满或者太忙的 ...
- Asp.net Mvc WebSocket
转载一种仿照Asp.net Mvc思维构建WebSocket服务器的方法 问题场景 Asp.net Mvc提供了DependencyResolver.Routing.Filter. Modelbind ...
- MVC使用百度开源文本编辑器UEditor实现图文并茂,字数限制,上传图片或涂鸦
原文:MVC使用百度开源文本编辑器UEditor实现图文并茂,字数限制,上传图片或涂鸦 文本编辑器有很多,比如ticymce和CKEditor就比较好用,但涉及到图片.文件上传,需要结合CKFinde ...
- 深入struts2.0(五)--Dispatcher类
1.1.1 serviceAction方法 在上个Filter方法中我们会看到例如以下代码: this.execute.executeAction(request, response, m ...
- Linux页快速缓存与回写机制分析
參考 <Linux内核设计与实现> ******************************************* 页快速缓存是linux内核实现的一种主要磁盘缓存,它主要用来降低 ...
- WEB安全实战(五)XSS 攻击的第二种解决方式(推荐)
序 说到 XSS 攻击,前边已经有两篇文章在讲这个事了,这次又拿出来说,主要是针对近期工作中的一些新的问题.那么之前是怎么解决问题的呢?为什么又要换解决方式?以下就具体的跟大家分享一下. 旧方案 公司 ...
- 鼠标hover事件
JS: // ========== // = 鼠标hover事件 = // ========== function showHide (btn,box) { $(btn).hover(function ...
- iOS:由URL成员UIImage
很多时候,我们只能得到URL.然后,需要建立一个UIImage. 在正常情况下,.我们一般通过SDWebImage直接施工UIImageVIew的image,如何使用URL直接施工UIImage它? ...