yii实现图片上传及缩略图生成的方法


Posted in PHP onDecember 04, 2014

本文实例讲述了利用yii框架来实现图片上传功能并在上传成功之后自动生成缩略图的方法,分享给大家供大家参考。具体实现方法如下:

Action文件:

<?php

/**

 * TestController.php

 * Created on: 2014-1-26 12:59:36 by Outsider

 */

class TestController extends CController {

 

    /**

     * 缩略图片生成

     * @ path 图片路径

     * @ width 图片宽度

     * @ height 图片高度

     */

    public function actionGetThumb($path, $w, $h) {

        $file_name = md5($path . $w . $h);

        if (file_exists('./temp/' . $file_name . '.jpg')) {

            header('location:/temp/' . $file_name . '.jpg');

            Yii::app()->end();

        }

        Yii::import("ext.EPhpThumb.EPhpThumb");

        $thumb = new EPhpThumb();

        $thumb->init();

        $thumb->create('.' . $path)

                ->adaptiveResize($w, $h)

                ->save('./temp/' . $file_name . '.jpg')

                ->show();

    }

 

    /*

     * 图片显示

     */

 

    public function actionList() {

        $attache = Attache::model();

        $list = $attache->findAll();

        $this->render('list', array('list' => $list));

        die;

    }

 

    /**

     * 文件上传

     */

    public function actionIndex() {

        $path = getcwd() . 'uploads';

        $dir = DIRECTORY_SEPARATOR . date('Y') . DIRECTORY_SEPARATOR . date('m');

        $dir = str_replace("\", "/", $dir);

        $uploads_dir = str_replace("\", "/", $path . $dir);

        if (!is_dir($uploads_dir) || !is_writeable($uploads_dir)) {

            mkdir($uploads_dir, 0777, TRUE);

            touch($uploads_dir . '/index.html');

        }

        $uploaded = false;

        $model = new Upload();

        if (isset($_POST['Upload'])) {

            $model->attributes = $_POST['Upload'];

            $file = CUploadedFile::getInstance($model, 'file');

            $newName = substr(md5($file->extensionName . round((microtime(true) * 1000))), 0, 17) . '.' . $file->extensionName; 

            $file_name = $uploads_dir . '/' . $newName;

            if ($model->validate()) {

                $attache = new Attache();

                $uploaded = $file->saveAs($file_name, TRUE);

                $attache->name = $file->getName();

                $attache->path = $dir . '/' . $newName;

                $attache->create_time = time();

                $attache->save();

            }

        }

 

        $this->render('index', array(

            'model' => $model,

            'uploaded' => $uploaded,

            'dir' => $uploads_dir,

        ));

    }

}

Upload.php:

<?php

class Upload extends CFormModel {

 

    public $file;

 

    public function rules() {

        return array(

            array('file', 'file', 'types' => 'jpg, gif, png,zip'),

        );

    }

}

图片显示页面:

自定义图片大小,缩略图自动生成

<?php

/**

 * list.php

 * Created on: 2014-1-26 13:12:01 by Outsider

 */

?>

<?php foreach ($list as $v): ?>

    <img src="<?php echo Yii::app()->createUrl('test/getThumb', array('path' => '/uploads' . $v['path'], 'w' => '150', 'h' => '150')) ?>">

<?php endforeach; ?>

图片上传表单:

<?php if($uploaded):?>

<p>File was uploaded. Check <?php echo $dir?>.</p>

<?php endif ?>

<?php echo CHtml::beginForm('','post',array

        ('enctype'=>'multipart/form-data'))?>

    <?php echo CHtml::error($model, 'file')?>

    <?php echo CHtml::activeFileField($model, 'file')?>

    <?php echo CHtml::submitButton('Upload')?>

<?php echo CHtml::endForm()?>

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php&amp;java(一)
Oct 09 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 PHP
探讨php中header的用法详解
Jun 07 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
如何打开php的gd2库
Feb 09 PHP
PHP静态成员变量和非静态成员变量详解
Feb 14 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 #PHP
yii的CURD操作实例详解
Dec 04 #PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 #PHP
php生成随机颜色方法汇总
Dec 03 #PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 #PHP
Yii框架中memcache用法实例
Dec 03 #PHP
yii中widget的用法
Dec 03 #PHP
You might like
劣质的PHP代码简化
2010/02/08 PHP
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
webpack入门必知必会
2017/01/16 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python序列操作之进阶篇
2016/12/08 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
python Django的web开发实例(入门)
2019/07/31 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
东方红海科技面试题软件测试方面
2012/02/08 面试题
Java程序员面试90题
2013/10/19 面试题
保护黄河倡议书
2014/05/16 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
律师催款函范文
2015/06/24 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
优化Mysql查询的示例
2022/04/26 MySQL