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 不同编码下的字符串长度区分
Sep 26 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php结合正则获取字符串中数字
Jun 19 PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python时间获取及转换知识汇总
2017/01/11 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
python实现百度语音识别api
2018/04/10 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
python实现坦克大战
2020/04/24 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
远程调用的原理
2014/07/05 面试题
大学军训感言
2014/01/10 职场文书
人事档案接收函
2014/01/12 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL