Thinkphp框架 -- ajax无刷新上传图片
用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无刷新上传图片的更多相关文章
- TP3.2:实现Ajax无刷新上传图片
1.基于TP3.2+ajaxfileupload进行无刷新上传图片,本次只上传一张,多张以后搞出来再发 2.效果: 3.html代码: <html> <head> < ...
- DWZ框架Ajax无刷新表单提交处理流程
DWZ框架Ajax无刷新表单提交处理流程是: 1. ajax表单提交给服务器 2. 服务器返回一个固定格式json结构 3. js会调函数根据这个json数据做相应 ...
- ajax无刷新上传图片
页面: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...
- 基于THINKPHP+layui+Ajax无刷新实现图片上传预览
<fieldset class="layui-elem-field" style="width:500px;margin:50px 0 0 300px;" ...
- 无刷新上传图片,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 ...
- thinkphp下实现ajax无刷新分页
1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...
- nodejs利用ajax实现网页无刷新上传图片
nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...
- thinkphp ajax 无刷新分页效果的实现
思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...
- 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传
现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...
随机推荐
- fancybox 在打开窗口前 先执行 js脚本,fancybox设置只能通过右上角关闭,fancybox遮罩层关闭
在默认情况下,fancybox点击之后弹出窗口,右上角带有一个XX,但是点击窗口的其他遮罩层或者是其他地方,都是可以关闭fancybox的,有些时候,我们不希望这样关闭,而是只能点击右上角关闭,那么设 ...
- 获取资源ID
比如,设置一张gif图片的宽高 gif.setShowDimension((int) CommonUtil.getDimen(R.dimen.gif), (int) CommonUtil.getDim ...
- Linux likely unlikely
/************************************************************************* * Linux likely unlikely * ...
- 【转】APUE学习1:迈出第一步,编译myls.c
原文网址:http://blog.csdn.net/sddzycnqjn/article/details/7252444 注:以下写作风格均学习自潘云登前辈 /******************** ...
- Android 项目利用 Android Studio 和 Gradle 打包多版本APK
在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...
- Jquery获取第一个子元素
如获取id为divId的div下的第一个子div $("#divId").children("div").get(0) 但得到的是一个dom对象,如果要得到Jq ...
- php mysql事务
这里记录一下php操作mysql事务的一些知识 要知道,MySQL默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务.但是,在使用事务时,是需要执行多条sq ...
- 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(6)
创建一个新文档(Creating a new document) 现在我们将尝试索引一些文档.对于我们的示例,让我们想象我们正在为我们的博客建立某种CMS.实体之一是博客的文章.使用JSON记法,在以 ...
- DOS功能的调用
DOS功能的调用:主要包含三方面的子程序:设备驱动(基本I/O),文件管理和其他(包括内存管理,自取时间,自取终端向量,总之程序等)随着DOS版本的升级,这种DOS功能调用的子程序数量也在不断的增加, ...
- oracle修改密码及账户锁定
在oracle修改密码的时候,一种是用dba账户来修改用户的密码,一种是用户自己修改自己的密码: SQL> alter user kel identified by kel; 解锁命令: SQL ...