zoukankan      html  css  js  c++  java
  • Thinkphp框架 -- ajax无刷新上传图片

    用Thinkphp框架做无刷新上传图片

    视图层 View

     1 <!doctype html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Ajax无刷新上传</title>
     6 </head>
     7 <script type="text/javascript" src="__PUBLIC__/js/jquery-1.10.2.min.js"></script>
     8 <script src="__PUBLIC__/js/Uploadify/jquery.uploadify.min.js" type="text/javascript"></script>
     9 
    10 <body>
    11     <div>
    12         <input type="file" name="pic" id="fields">
    13     </div>
    14     <div style="150px;height:150px;border:1px solid red" class="b">
    15         <img src="{$_SESSION['userinfo']['img2']}" class="picimg" style="150px">
    16     </div>
    17 </body>
    18     <script type="text/javascript">
    19     //修改头像
    20     $(function() {
    21            $("#fields").uploadify({
    22             //指定swf文件
    23             'swf': '__PUBLIC__/js/Uploadify/uploadify.swf',
    24             //后台处理的页面
    25             'uploader': "{:U('Index/uploads','',false)}",//上传图片的方法
    26             //按钮显示的文字
    27             'buttonText': '上传头像',
    28              //显示的高度和宽度
    29             "height" : 30,
    30             'fileTypeDesc': 'Image Files',
    31             //允许上传的文件后缀
    32             'fileTypeExts': '*.gif; *.jpg; *.png',
    33             //发送给后台的其他参数通过formData指定
    34             //'formData': { 'someKey': 'someValue', 'someOtherKey': 1 },
    35             "method" : 'post',//方法,服务端可以用$_POST数组获取数据
    36             'removeTimeout'  : 1,
    37             "onUploadSuccess" : uploadPicture
    38           });
    39           //可以根据自己的要求来做相应处理
    40           function uploadPicture(file, data){
    41             var data = eval('(' + data + ')');
    42            if(data.errorcode){
    43                //如果成功,就将返回来值放到要显示的DIV里面
    44                 $.post(
    45 
    46                     "{:U('ajaxImg')}",//返回值的方法
    47 
    48                     function (data){
    49 
    50                         $('.picimg').attr({src:data});//找到IMG标签,修改属性
    51 
    52                     },
    53 
    54                     'json'
    55 
    56                 )
    57 
    58            } else {
    59             alert(data.errormsg);
    60            }
    61           } 
    62      });
    63 
    64     </script>
    65 
    66 </html>

    控制器层 Controller

     1 <?php
     2     namespace HomeController;
     3     use ThinkController;
     4     class IndexController extends Controller 
     5     {
     6         //视图
     7         public function index()
     8         {
     9             $this->display();
    10         }
    11 
    12         //上传图片方法
    13         public function uploads()
    14         {
    15               $arr = array( "errorcode"=>"1","errormsg"=>"上传成功");
    16               $model = M('img');//放图片的数据库
    17               if (!empty($_FILES)) {
    18                 //图片上传设置
    19                 $config = array( 
    20                 'maxSize' => 9999999, 
    21                 'rootPath' => 'Public',
    22                 'savePath' => '/Uploads/', 
    23                 'saveName' => array('uniqid',''), 
    24                 'exts'  => array('jpg', 'gif', 'png', 'jpeg'), 
    25                 'autoSub' => false, 
    26                 'subName' => array('date','Ymd'),
    27                    );
    28                   $upload = new ThinkUpload($config);// 实例化上传类
    29                   $info = $upload->upload();
    30 
    31                 $data['img'] = '/TP4/thinkphp_3.2.3_full/Public'.$info['Filedata']['savepath'].$info['Filedata']['savename'];//绝对路径
    32 
    33                 if($info){
    34 
    35                     $arr['errorcode'] = "0";
    36                     $model->add($data);
    37                     $_SESSION['userinfo']['img2'] = $data['img'];//将路径放到session中
    38 
    39                } else {
    40                 $arr["errorcode"] = "1";
    41                 $arr["errormsg"] = $upload->getError();
    42                }
    43                /* 返回JSON数据 */
    44                $this->ajaxReturn($arr);
    45               }
    46         }
    47 
    48         //在视图中的AJAX返回值方法内用$.POST再取一次返回值
    49         public function ajaxImg()
    50         {
    51             $arr = $_SESSION['userinfo']['img2'];
    52             
    53             $this->ajaxReturn($arr);
    54         }
    55     }

    页面效果

    数据库

    思路:

      1.首先调用插件 jquery.uploadify.min.js

        在视图层的<script></script>标签内写好配置信息

      2.然后在控制器层写好调用方法,上传成功时候就把路径存储到$_SESSION中,因为$_SESSION全局通用,比较方便

      以上两步的具体代码在插件中都可以直接复制粘贴,修改以下数据库名,图片存储路径就可以,我用的是绝对路径。

      3.返回的是响应成功再调用一次AJAX,从第二个方法,也就是控制器层 49 行。将$_SESSION中的值返回到视图层中。

      4.视图层 50 行,用attr()方法,找到IMG标签,把返回的路径添加到src中。完成。

    附件 jquery.uploadify.min.js插件

      百度云http://pan.baidu.com/s/1kUH4UN1;

      

  • 相关阅读:
    第一次Java作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    Java中数组自定义排序与优先级队列笔记
    力扣每日一题:删除链表的倒数第N个节点
    又一次离谱的错误——运算符优先级
  • 原文地址:https://www.cnblogs.com/chenrunxuan/p/6116702.html
Copyright © 2011-2022 走看看