Yii+upload实现AJAX上传图片的方法


Posted in PHP onJuly 13, 2016

本文实例讲述了Yii+upload实现AJAX上传图片的方法。分享给大家供大家参考,具体如下:

控制器代码:

/**
* get ajax uploaded files.
*/
public function actionGetAjax(){
    $model=new Attachment();//加载附件模型
    $tmpFile  = CUploadedFile::getInstanceByName('image');//读取图像上传域,并使用系统上传组件上传
    $Directroy = Yii::app()->params['uploadPath'];//读取上传配置文件,我的配置是/uploads
    //创建文件存放路径
    $y     = date('Y');
    $m     = date('m');
    $d     = date('d');
    $Directroy = $Directroy."/";
    $pathd = $Directroy.$y."/".$m."/".$d."/";
    Tool::makedir(dirname(Yii::app()->BasePath).$pathd); //创建文件夹,此处一定要加上dirname(Yii::app()->BasePath)不然可能会出错;
    if(is_object($tmpFile) && get_class($tmpFile)==='CUploadedFile'){
      $filename        = time().rand(0,9);
      $ext          = $tmpFile->extensionName;//上传文件的扩展名
      if($ext=='jpg'||$ext=='gif'||$ext=='png'){
          $big          = $pathd . $filename . '_600.' . $ext; //310缩略图
        $small         = $pathd . $filename . '_310.' . $ext; //310缩略图
        $thumb         = $pathd . $filename . '_100.' . $ext; //100缩略图
        $model->zat_thumb    = $thumb; //缩略图
      }
      $uploadfile       = $pathd . $filename . '.' . $ext;   //保存的路径
      $model->zat_url     = $pathd . $filename . '.' . $ext;   //重新赋值
      $model->zat_file_name  = $filename . '.' . $ext;        //文件名称
      $model->zat_title    = $tmpFile->name;            //文件标题
      $model->zat_file_type  = $tmpFile->type;            //文件类型
      $model->zat_file_size  = $tmpFile->size;            //文件大小
      $model->zat_image    = 2;
      $model->zat_ip     = Yii::app()->request->userHostAddress; //上传IP
      //print_r($uploadfile);
    }
    if($model->save()){
      $tmpFile->saveAs(dirname(Yii::app()->BasePath).$uploadfile);//保存到服务器
      if($ext=='jpg'||$ext=='gif'||$ext=='png'){
        $img = Yii::app()->image->load(dirname(Yii::app()->BasePath).$uploadfile); //使用image-Kohana图像处理库扩展
        $img->resize(600,600)->quality(85);
        $img->save(dirname(Yii::app()->BasePath).$big);//生成600缩略图
        $img->resize(310,310)->quality(85);
        $img->save(dirname(Yii::app()->BasePath).$small);//生成310缩略图
        $img->resize(100,100)->quality(85);
        $img->save(dirname(Yii::app()->BasePath).$thumb);//生成100缩略图
      }
      if($ext=='jpg'||$ext=='gif'||$ext=='png'){
        $str = json_encode(
          array(
            'upfile'=>array(
              'zat_id' => Yii::app()->db->getLastInsertID(), //取插ID
              'file' => $uploadfile,//原图
              'small' => $small,//310缩略图
              'thumb' => $thumb,//100缩略图
            )
          )
        );
      }else{
        $str = json_encode(
          array(
            'upfile'=>array(
              'zat_id' => Yii::app()->db->getLastInsertID(),
              'file' => $uploadfile,
            )
          )
        );
      }
      echo $str;
    }
}

VIEW代码:

<input id="fileupload" type="file" name="image" multiple>
<script src="<?php echo Yii::app()->baseUrl;?>/js/jquery.ui.widget.js"></script>
<script src="<?php echo Yii::app()->baseUrl;?>/js/jquery.iframe-transport.js"></script>
<script src="<?php echo Yii::app()->baseUrl;?>/js/jquery.fileupload.js"></script>
<script>
$(function () {
  $('#fileupload').fileupload({
    dataType: 'json',
    url: '/Attachment/GetAjax',
    success: function (json) {
        $('#MemType_zmt_pic').attr('value',json.upfile.file);
        $("#images").attr('src',json.upfile.file);
    }
  });
});
</script>

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP设计聊天室步步通
Oct 09 PHP
其他功能
Oct 09 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
php计算整个目录大小的方法
Jun 19 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
Yii安装与使用Excel扩展的方法
Jul 13 #PHP
Yii配置与使用memcached缓存的方法
Jul 13 #PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 #PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 #PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 #PHP
ucenter中词语过滤原理分析
Jul 13 #PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 #PHP
You might like
dedecms集成财付通支付接口
2014/12/28 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
python实现数独算法实例
2015/06/09 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
python将unicode转为str的方法
2017/06/21 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
Python数据结构之图的应用示例
2018/05/11 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
python flask搭建web应用教程
2019/11/19 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
软件测试企业面试试卷
2016/07/13 面试题
商场活动策划方案
2014/01/24 职场文书
师说教学反思
2014/02/07 职场文书
设计师求职信
2014/07/01 职场文书
医院合作协议书
2014/08/19 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
MySQL 如何设计统计数据表
2021/06/15 MySQL
vue3中provide && inject的使用
2021/07/01 Vue.js