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 Sql Server连接失败问题及解决办法
Aug 07 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
php验证手机号码
Nov 11 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
Laravel 实现数据软删除功能
Aug 21 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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
Protoss热键控制
2020/03/14 星际争霸
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
新浪的图片新闻效果
2007/01/13 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
python定向爬取淘宝商品价格
2018/02/27 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
tensorflow 变长序列存储实例
2020/01/20 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
机械电子工程专业推荐信范文
2013/11/20 职场文书
2014年应急工作总结
2014/12/11 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫