yii图片上传
http://wuhai.blog.51cto.com/2023916/953300
首先感谢这里的博主,提供了思路,不过在调用 $model->b_image->extensionName 这个时,总提示错误,调呀调的,调烦了,就自己写一个吧。
其他不多说,看步骤
一、下载yii官方提供的图片处理扩展 http://www.yiiframework.com/extension/image 具体配置跟官方的一样,这个扩展提供了两套调用方式,我选择了第一种,就是在配置文件里进行添加组件的方式,来张图,有图有真象哈

二、在protected目录下新建一utils目录,在目录下新建Upload.php文件,代码如下
<?php
/**
* @desc 对后台上传的图片进行简单处理
* @author Debm!
* @param $name 原图片名称
* @param $type 判断mime值
* @param $tmp_name 临时位置,转换目录使用
* @param $width 新图宽
* @param $height 新图高
* @return string path 存放路径
*/
class Upload
{
public static function createImageLink($name, $type, $tmp_name, $width, $height){
$imageMime = array(
'image/gif',
'image/jpeg',
'image/bmp',
//需要时添加...
);
if(!in_array($type, $imageMime)){
return false;
}else{
//获取图片后缀
$imageExt = end(explode('.', $name));
//以当前时间命名此图片,避免重复
$name = time().uniqid().'.'.$imageExt;
//创建存放路径
$path = Yii::app()->request->baseUrl.'images/uploads/'.$name;
//图片处理
$image = Yii::app()->image->load($tmp_name);
$image->resize($width, $height)->rotate(0)->quality(100)->sharpen(20);
$image->save($path);
// move_uploaded_file($tmp_name,$path);
return $path;
}
}
}
三、在 protected/config/main.php 这个文件里,把刚才的utils目录载入
'import'=>array(
'application.models.*',
'application.components.*',
'application.extensions.*',
'application.helpers.*',
'application.utils.*',
'application.modules.boss.modules.srbac.controllers.SBaseController',
),
四、写代码
model部分
添加图片验证规则,其他规则根据自己需要进行添加,这里我只添加需要展示的代码(views和controller一样,不再说明了)
public function rules()
{
return array(
array('b_image', 'file', 'types' => 'jpg,gif,png', 'on' => 'insert'),
);
}
views
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'iot-books-form',
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation'=>false,
'htmlOptions'=>array('enctype'=>'multipart/form-data'),//这个一定要加,否则获取不到图片
)); ?>
<div class="row">
<?php echo $form->labelEx($model,'b_image'); ?>
<?php
if(!$model->isNewRecord){
?>
<img src="<?php echo Yii::app()->request->baseUrl.'/'.$model->b_image; ?>">
<?php
}
?>
<?php echo CHtml::activeFileField($model,'b_image',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'b_image'); ?>
</div>
controller
/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'view' page.
*/
public function actionCreate()
{
$model=new IotBooks; // Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model); if(isset($_POST['IotBooks']))
{
$imgUrl = '';
if($_FILES){
$name = $_FILES['IotBooks']['name']['b_image']; //上传图片原名
$type = $_FILES['IotBooks']['type']['b_image']; //上传图片mime类型
$tmp_name = $_FILES['IotBooks']['tmp_name']['b_image']; //上传图片临时存放位置
$width = 100; //缩略图宽
$height = 100; //缩略图高
$imgUrl = Upload::createImageLink($name, $type, $tmp_name, $width, $height);
}
$model->attributes = $_POST['IotBooks'];
$model->b_image = $imgUrl;
if($model->save())
$this->redirect(array('view','id'=>$model->bid));
}
$this->render('create',array(
'model'=>$model,
));
} /**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id the ID of the model to be updated
*/
public function actionUpdate($id)
{
$model=$this->loadModel($id); // Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model); if(isset($_POST['IotBooks']))
{
$imgUrl = $model->b_image;
if($_FILES && ($_FILES['IotBooks']['name']['b_image'] != '')){
$name = $_FILES['IotBooks']['name']['b_image']; //上传图片原名
$type = $_FILES['IotBooks']['type']['b_image']; //上传图片mime类型
$tmp_name = $_FILES['IotBooks']['tmp_name']['b_image']; //上传图片临时存放位置
$width = 100; //缩略图宽
$height = 100; //缩略图高
$imgUrl = Upload::createImageLink($name, $type, $tmp_name, $width,$height);
}
$model->attributes = $_POST['IotBooks'];
$model->b_image = $imgUrl;
if($model->save())
$this->redirect(array('view','id'=>$model->bid));
} $this->render('update',array(
'model'=>$model,
));
}
完工了,试一下吧
yii图片上传的更多相关文章
- yii2解决百度编辑器umeditor图片上传问题
作者:白狼 出处:http://www.manks.top/article/yii2_umeditor_upload本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原 ...
- yii php 图片上传与生成缩略图
今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图 ($pic_action_url = $this->createAbsoluteUrl('h ...
- yii2.0 图片上传(摘录)
文章来源:http://blog.sina.com.cn/s/blog_88a65c1b0101izmn.html 下面小伙就带领大学学习一下 Yii2.0 的图片上传类的使用,还是老样子,如果代码样 ...
- uploadPreview 兼容多浏览器图片上传及预览插件使用
uploadPreview兼容多浏览器图片上传及预览插件 http://www.jq22.com/jquery-info2757 Html 代码 <div class="form-gr ...
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- 06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- JS图片上传预览插件制作(兼容到IE6)
其实,图片预览功能非常地常见.很意外,之前遇到上传图片的时候都不需要预览,也一直没有去实现过.现在手上的项目又需要有图片预览功能,所以就动手做了一个小插件.在此分享一下思路. 一.实现图片预览的一些方 ...
- HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术
最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...
- 对百度的UEditor多图片上传的一些补充
我已经写了一篇文章关于百度的UEditor提取多图片上传模块.如果还没有看过,请点击以下链接查看 http://www.cnblogs.com/luke1006/p/3719029.html 出差了两 ...
随机推荐
- JavaScript_object(基于map和数组练习)
JavaScript在编程过程中,不会像java那么方便,提供大量的API让开发这直接去调用,但底层也封装大量的工具让开发者写方法去实现, 以map为例,写简单的增删改查模拟java中的map: fu ...
- Knockoutjs官网翻译系列(一)
最近马上要开始一个新项目的研发,作为第一次mvvm应用的尝试,我决定使用knockoutjs框架.作为学习的开始就从官网的Document翻译开始吧,这样会增加印象并加入自己的思考,说是翻译也并不是纯 ...
- 【USACO 2.3.3】零数列
[题目描述] 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,“ ”表示空白(例如1-2 3就等于 ...
- 关于PHPstorm 使用技巧
慢慢更新,一点点积累,都是自己在使用中遇到的问题 设置:(2016.4.15) 1:注释模板,phpstorm 有非常强大的注释模板,可以根据自己的需求随时更改,并设置快捷键,非常方便 新文件注释 P ...
- 说一说&&符
今天添加检测代码,还得添加好几套,好蛋疼. 为了省点事,全写在HTML的行间onclick里,为此专门琢磨了一下&&的用法. 一般用&&(除了逻辑判断里),是为了简写i ...
- Python 网路编程读书笔记x UDP
UDP 协议基础 在IP网络层,所有的数据包会向一个指定的主机传输 Source IP -> Destination IP 但是两台机器之间可能有许多独立的应用需要进行通信,因此为了区分不同的 ...
- struts2中的路径问题
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java&q ...
- iOS开发——OC篇&消息传递机制(KVO/NOtification/Block/代理/Target-Action)
iOS开发中消息传递机制(KVO/NOtification/Block/代理/Target-Action) 今晚看到了一篇好的文章,所以就搬过来了,方便自己以后学习 虽然这一期的主题是关于Fou ...
- HTML中插入视频
最常用的向HTML中插入视频的方法有两种,一种是古老的<object></object>标签,一种是html5中的<video></video>标签. ...
- 委托的lambda表达式
委托可以用 Lambda 表达式的方法来表示,很多C#的代码都会大量使用 Lambda 表达式,正确理解它的用法还是很重要的. 基础规则: Lambda 运算符 “=>” 左边表示委托实例所需要 ...