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图片上传的更多相关文章

  1. yii2解决百度编辑器umeditor图片上传问题

    作者:白狼 出处:http://www.manks.top/article/yii2_umeditor_upload本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原 ...

  2. yii php 图片上传与生成缩略图

    今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图              ($pic_action_url = $this->createAbsoluteUrl('h ...

  3. yii2.0 图片上传(摘录)

    文章来源:http://blog.sina.com.cn/s/blog_88a65c1b0101izmn.html 下面小伙就带领大学学习一下 Yii2.0 的图片上传类的使用,还是老样子,如果代码样 ...

  4. uploadPreview 兼容多浏览器图片上传及预览插件使用

    uploadPreview兼容多浏览器图片上传及预览插件 http://www.jq22.com/jquery-info2757 Html 代码 <div class="form-gr ...

  5. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  6. 06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传

    LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...

  7. JS图片上传预览插件制作(兼容到IE6)

    其实,图片预览功能非常地常见.很意外,之前遇到上传图片的时候都不需要预览,也一直没有去实现过.现在手上的项目又需要有图片预览功能,所以就动手做了一个小插件.在此分享一下思路. 一.实现图片预览的一些方 ...

  8. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  9. 对百度的UEditor多图片上传的一些补充

    我已经写了一篇文章关于百度的UEditor提取多图片上传模块.如果还没有看过,请点击以下链接查看 http://www.cnblogs.com/luke1006/p/3719029.html 出差了两 ...

随机推荐

  1. ajax页面数据的传递

    在上一篇文章中,简单提到了ajax的工作流程,那么在这里我们就得实战一回了,真正将ajax的用途展现出来,这一整套流程就是在页面上触发一个ajax事件,然后发送请求,紧接着到数据库读取数据,返回值,然 ...

  2. ASP.NET WEB API 2 框架揭秘 读书笔记(一)

    第一章 概述 主要内容是介绍Web的基本概念,Restfull的基本概念及特性.最后介绍创建简单WebApi程序的步骤. Web的基本概念 IP/TCP协议簇分层,分为两种 链路层->网络层-& ...

  3. Jssdk微信分享

    <?php require_once "jssdk.php"; $jssdk = new JSSDK("yourAppID", "yourApp ...

  4. javascript 向上滚动

    <html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Co ...

  5. SCJP_104——题目分析(3)

    11. what is reserved words in java?A. run B. default C. implement D. import Java 中,给标识符取名的时候,不能使用关键字 ...

  6. 一个测ip和端口是否联通的工具类

    public class TestIp { public static void main(String[] args) { Socket connect = new Socket(); try { ...

  7. windows+linux下jdk安装及java环境变量配置

    对于初学java的用户来说,可能第一件要做的事情就是安装jdk及配置环境,以下内容主要讲述windows及linux下jdk的安装以及环境变量的配置. 1.首先下载相应平台可用版本jdk安装文件,可以 ...

  8. Multiplication Table

    CF#256D:http://codeforces.com/contest/448/problem/D 题意:给你一个n*m的表格,第i行第j列的数据是i*j,然后询问第k小的数,这里的排序是不去重的 ...

  9. [Android] 混音线程MixerThread

    MixerThread是Android音频输出的核心部分,所有Android的音频都需要经过MixerThread进行混音后再输出到音频设备. MixerThread的继承关系如下: MixerThr ...

  10. 理解java中的ThreadLocal(转)

    一.对ThreadLocal概述 JDK API 写道: 该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的 ...