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;

      

  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/chenrunxuan/p/6116702.html
Copyright © 2011-2022 走看看