thinkphp ajax无刷新上传头像

在做ajax无刷新上传时,遇到很多问题,一开始想用JQ直接接$(‘[input=file]’).val的值,但是发现这个接到根本就不是一个值,百度发现浏览器由于安全问题,不会显示这个值。

然后用想在文件改变后自动提交submit,改变action的地址,上文件上传后再返回回来,这个方法造成了页面刷新。

 

html页面

<form method="post" action="{:U('action',array('action'=>adddo))}" enctype = "multipart/form-data" id= 'form'>

  <input type="file" name="picname" id="fields" onchange = ‘eventStart()’>

</form>

 

JQ

function eventStart(){

var tmpHref="{:U('show')}";

$('#form').attr('action',tmpHref);

$('#form').submit();

}

 

}

 

之后在某个博主那看到思路。进行了自己的理解,加修改

1.首先调用插件jquery.uploadify.min.js 在视图层<script></script>内写好配置信息

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

3.返回的是响应成功再调用一次ajax,从第二个方法,讲$_SESSION中的值返回到视图层中

4.attr()方法,找到img标签,把返回路径添加到src中。

 

 

在文件上传的时候要找清楚路径在ThinkPHP\Library\Think\Upload.class.php

 'rootPath'      =>  './public/images/file/', //保存根路径 就是你想把文件上传到哪一个文件夹里面  但是这个会自动生成当前日期加文件名

 'savePath'      =>  '', //保存路径

 

当然这些值我们也可以在外边定义

 $config = array(

                 'maxSize' => 9999999,

                 'rootPath' => 'Public/Uploads/',

                 'savePath' => '',

                 'saveName' => array('uniqid',''),

                 'exts'  => array('jpg', 'gif', 'png', 'jpeg'),

                 'autoSub' => false,

                 'subName' => array('date','Ymd'),

                    );

 

html页面

 

<!doctype html>

  <html lang="en">

  <head>

      <meta charset="UTF-8">

      <title>Ajax无刷新上传</title>

  </head>

  <script src="__PUBLIC__/Js/jquery-1.8.3.min.js" ></script>

  <script src="__PUBLIC__/js/Uploadify/jquery.uploadify.min.js" type="text/javascript"></script>

  

 <body>

     <div>

         <input type="file" name="pic" id="fields">

     </div>

     <div style="width:150px;height:150px;border:1px solid red" class="b">

<!--使用了上传的图片-->

         <img src="{$_SESSION['userinfo']['img2']}" class="picimg" style="width:150px">

     </div>

 </body>

     <script type="text/javascript">

     //修改头像

     $(function() {

            $("#fields").uploadify({

             //指定swf文件  我们下载的包

             'swf': '__PUBLIC__/js/Uploadify/uploadify.swf',

             //后台处理的页面 同步异步

             'uploader': "{:U('Index/uploads','',false)}",//上传图片的方法

             //按钮显示的文字  

             'buttonText': '上传头像',

              //显示的高度和宽度

             "height" : 30,

             'fileTypeDesc': 'Image Files',

             //允许上传的文件后缀

             'fileTypeExts': '*.gif; *.jpg; *.png',

             //发送给后台的其他参数通过formData指定

             //'formData': { 'someKey': 'someValue', 'someOtherKey': 1 },

             "method" : 'post',//方法,服务端可以用$_POST数组获取数据

             'removeTimeout'  : 1,

             "onUploadSuccess" : uploadPicture

           });

           //可以根据自己的要求来做相应处理

           function uploadPicture(file, data){

             var data = eval('(' + data + ')');

            if(data.errorcode){

                //如果成功,就将返回来值放到要显示的DIV里面

                 $.post(

 

                     "{:U('ajaxImg')}",//返回值的方法

 

                     function (data){

 

                         $('.picimg').attr({src:data});//找到IMG标签,修改属性

 

                     },

 

                     'json'

 

                 )

 

            } else {

             alert(data.errormsg);

            }

           }

      });

 

     </script>

 

 </html>

 

Controller页面

 

 

<?php

namespace Admin\Controller;

use Think\Controller;

class IndexController extends Controller {

    public function index(){

              $this->display();

         }

 

         //上传图片方法

         public function uploads()

         {

               $arr = array( "errorcode"=>"1","errormsg"=>"上传成功");

               $model = M('img');//放图片的数据库

               if (!empty($_FILES)) {

                 //图片上传设置

                 $config = array(

                 'maxSize' => 9999999,

                 'rootPath' => 'Public/Uploads/',//上传哪一个文件夹里面

                 'savePath' => '',

                 'saveName' => array('uniqid',''),

                 'exts'  => array('jpg', 'gif', 'png', 'jpeg'),

                 'autoSub' => false,

                 'subName' => array('date','Ymd'),

                    );

                   $upload = new \Think\Upload($config);// 实例化上传类

                   $info = $upload->upload();

 

                 $data['img'] = '/project/Public/Uploads/'.$info['Filedata']['savename'];//绝对路径   这个图片的绝对路径,放到数据库

 

                if($info){

 

                     $arr['errorcode'] = "0";

                     $model->add($data);

                     $_SESSION['userinfo']['img2'] = $data['img'];//将路径放到session

 

                } else {

                 $arr["errorcode"] = "1";

                 $arr["errormsg"] = $upload->getError();

                }

                /* 返回JSON数据 */

                $this->ajaxReturn($arr);

               }

         }

 

         //在视图中的AJAX返回值方法内用$.POST再取一次返回值

         public function ajaxImg()

         {

             $arr = $_SESSION['userinfo']['img2'];

             

             $this->ajaxReturn($arr);

         }

}

 

 

结果:

 

 

转载于:https://www.cnblogs.com/930115586qq/p/7756284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值