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调用三种数据库的方法(2)
Oct 09 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
php 中的4种标记风格介绍
May 10 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
PHP中预定义的6种接口介绍
May 12 PHP
PHP封装的HttpClient类用法实例
Jun 17 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 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
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
面包屑导航详解
2017/12/07 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
详解python中asyncio模块
2018/03/03 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
WxPython实现无边框界面
2019/11/18 Python
Python yield的用法实例分析
2020/03/06 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
关于工资低的辞职信
2014/01/14 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
事业单位聘任报告
2015/03/02 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
Android 中的类文件和类加载器详情
2022/06/05 Java/Android