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 相关文章推荐
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
php笔记之常用文件操作
Oct 12 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
PDO::inTransaction讲解
Jan 28 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP函数常用用法小结
2010/02/08 PHP
PHP的博客ping服务代码
2012/02/04 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
JS验证不重复验证码
2017/02/10 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
浅谈Python的异常处理
2016/06/19 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python字典快速保存于读取的方法
2018/03/23 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python笔记之观察者模式
2019/11/20 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
竞职演讲稿范文
2014/01/11 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
党员转正介绍人意见
2015/06/03 职场文书
钢琴师观后感
2015/06/12 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书