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 intval的测试代码发现问题
Jul 27 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP 断点续传实例详解
Nov 11 PHP
PDO::exec讲解
Jan 28 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php巧获服务器端信息
2006/12/06 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
Python字符遍历的艺术
2008/09/06 Python
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
什么是python的列表推导式
2020/05/26 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python基于内置函数type创建新类型
2020/10/22 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
《自然之道》教学反思
2014/02/11 职场文书
洗发水广告词
2014/03/13 职场文书
表扬信范文
2015/05/04 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript