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中使用Oracle数据库(3)
Oct 09 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
PHP实现合并discuz用户
Aug 05 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
PHP解析url并得到url参数方法总结
Oct 11 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
PHP判断一个变量是否为整数、正整数的方法示例
Sep 11 PHP
PHP时间相关常用函数用法示例
Jun 03 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
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
Python imread、newaxis用法详解
2019/11/04 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
广州某公司软件工程师面试题
2014/12/22 面试题
幼儿园安全检查制度
2014/01/30 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
人事局接收函
2015/01/30 职场文书
js之ajax文件上传
2021/05/13 Javascript
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python