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

视图层 View

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ajax无刷新上传</title>
</head>
<script type="text/javascript" src="__PUBLIC__/js/jquery-1.10.2.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 Home\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',
'savePath' => '/Uploads/',
'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'] = '/TP4/thinkphp_3.2.3_full/Public'.$info['Filedata']['savepath'].$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);
}
}

页面效果

数据库

思路:

  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;

  

Thinkphp框架 -- ajax无刷新上传图片的更多相关文章

  1. TP3.2:实现Ajax无刷新上传图片

    1.基于TP3.2+ajaxfileupload进行无刷新上传图片,本次只上传一张,多张以后搞出来再发 2.效果:   3.html代码: <html> <head> < ...

  2. DWZ框架Ajax无刷新表单提交处理流程

    DWZ框架Ajax无刷新表单提交处理流程是: 1.       ajax表单提交给服务器 2.       服务器返回一个固定格式json结构 3.       js会调函数根据这个json数据做相应 ...

  3. ajax无刷新上传图片

    页面: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...

  4. 基于THINKPHP+layui+Ajax无刷新实现图片上传预览

    <fieldset class="layui-elem-field" style="width:500px;margin:50px 0 0 300px;" ...

  5. 无刷新上传图片,ajax 和 iframe

    iframe 上传 upload.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  6. thinkphp下实现ajax无刷新分页

    1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...

  7. nodejs利用ajax实现网页无刷新上传图片

    nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...

  8. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

  9. 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

    现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...

随机推荐

  1. UVA 11354 Bond(最小瓶颈路+倍增)

    题意:问图上任意两点(u,v)之间的路径上,所经过的最大边权最小为多少? 求最小瓶颈路,既是求最小生成树.因为要处理多组询问,所以需要用倍增加速. 先处理出最小生成树,prim的时间复杂度为O(n*n ...

  2. Java [Leetcode 257]Binary Tree Paths

    题目描述: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tr ...

  3. RTP协议之Header结构解析

    实时传输协议 RTP,RTP 提供带有实时特性的端对端数据传输服务,传输的数据如:交互式的音频和视频.那些服务包括有效载荷类型定义,序列号,时间戳和传输监测控制.应用程序在 UDP 上运行 RTP 来 ...

  4. Nginx源码安装及调优配置

    导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...

  5. 仿网易新闻客户端头条ViewPager嵌套实例

    要点: 1.重写组件public boolean onInterceptTouchEvent(MotionEvent event)方法 2.正确使用requestDisallowInterceptTo ...

  6. UiThread DEMO

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.a ...

  7. Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

    RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

  8. C++ static内容小结

    C++中static总结比较好的博客:http://blog.csdn.net/laixingjun/article/details/9139839 http://blog.csdn.net/xiaj ...

  9. [原创]cocos2d-x + Lua接入iOS原生SDK的实现方案

    相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...

  10. [GRYZ2015]Graph

    题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点. 输入格式 第 1 行,2 个整数 N,M. 接下来 M 行,每行 2 个整数 Ui ...