PHP+Ajax无刷新带进度条图片上传示例


Posted in PHP onFebruary 08, 2017

项目需求:1.PHP+Ajax无刷新带进度条图片上传,2.带进度条。所需插件:jquery.js,jquery.form.js。

最近在做一个手机web项目,需要用到Ajax上传功图片能,项目要求PHP无刷新上传图片,并且要带进度条,下面就来讲一下我的实现方法,先看效果图

PHP+Ajax无刷新带进度条图片上传示例

本示例需要使用的是jquery.js,jquery.form.js,demo里面包含有,你可以在文章下方进行下载。

第一步,建立前端页面index.html

此段是前端展示内容,这里需要说明的是由于input:file标签显示不太美观,所以我把它隐藏了。而使用一个a标签.uploadbtn来调用file标签的click事件,用来打开并选择文件。

注意:文件上传时form的属性enctype必须设置为:multipart/form-data

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>php-ajax无刷新上传(带进度条)demo</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width , initial-scale=1.0 , user-scalable=0 , minimum-scale=1.0 , maximum-scale=1.0" />
<script type='text/javascript' src='js/jquery-2.0.3.min.js'></script>
<script type='text/javascript' src='js/jquery.form.js'></script>
<link href="css/style.css" rel="external nofollow" type="text/css" rel="stylesheet"/>
</head>
<body>
<div style="width:500px;margin:10px auto; border:solid 1px #ddd; overflow:hidden; ">
 <form id='myupload' action='upload.php' method='post' enctype='multipart/form-data'>
 <input type="file" id="uploadphoto" name="uploadfile" value="请点击上传图片" style="display:none;" />
 </form>
 <div class="imglist"> </div>
 <p class="res"></p>
 <div class="progress">
 <div class="progress-bar progress-bar-striped"><span class="percent">50%</span></div>
 </div>
 <a href="javascript:void(0);" rel="external nofollow" onclick="uploadphoto.click()" class="uploadbtn">点击上传文件</a>
</div>
</body>
</html>

第二步,Ajax提交部分

这部份就是Ajax的提交部份,过程如下:

  • 在提交开始通过beforeSend回调函数设置进度条显示出来,进度条宽度为0%,进度值0%;
  • 在上传过程中通过uploadProgress回调函数实时返回的数据,更改进度条的宽度和进度值。
  • 在上传成功后,通过success回调函数输出上传为数据信息(图片名称,大小,地址等)并把图片输出到页面上预览。
  • 当然如果失败,有error回调函数帮你进行高度。
<script type="text/javascript">
$(document).ready(function(e) {
 var progress = $(".progress"); 
 var progress_bar = $(".progress-bar");
 var percent = $('.percent');
 $("#uploadphoto").change(function(){
 $("#myupload").ajaxSubmit({ 
 dataType: 'json', //数据格式为json 
 beforeSend: function() { //开始上传 
 progress.show();
 var percentVal = '0%';
 progress_bar.width(percentVal);
 percent.html(percentVal);
 }, 
 uploadProgress: function(event, position, total, percentComplete) { 
 var percentVal = percentComplete + '%'; //获得进度 
 progress_bar.width(percentVal); //上传进度条宽度变宽 
 percent.html(percentVal); //显示上传进度百分比 
 }, 
 success: function(data) {
 
 if(data.status == 1){
 var src = data.url; 
 var attstr= '<img src="'+src+'">'; 
 $(".imglist").append(attstr);
 $(".res").html("上传图片"+data.name+"成功,图片大小:"+data.size+"K,文件地址:"+data.url);
 }else{
 $(".res").html(data.content);
 }
 progress.hide(); 
 }, 
 error:function(xhr){ //上传失败 
 alert("上传失败"); 
 progress.hide(); 
 } 
 }); 
 });
 
});
</script>

第三步,后端PHP代码upload.php

后端处理代码,就是PHP文件上传,不过上传的时候需要做一些判断,如文件格式、文件大小等。

注意:我上面ajax返回格式是json,所以在图片json代码是一定要正确规范,否则会出现上传不成功的提示。

$picname = $_FILES['uploadfile']['name']; 
 $picsize = $_FILES['uploadfile']['size']; 
 if ($picname != "") { 
 if ($picsize > 2014000) { //限制上传大小 
 echo '{"status":0,"content":"图片大小不能超过2M"}';
 exit; 
 } 
 $type = strstr($picname, '.'); //限制上传格式 
 if ($type != ".gif" && $type != ".jpg" && $type != "png") {
 echo '{"status":2,"content":"图片格式不对!"}';
 exit; 
 }
 $rand = rand(100, 999); 
 $pics = uniqid() . $type; //命名图片名称 
 //上传路径 
 $pic_path = "images/". $pics; 
 move_uploaded_file($_FILES['uploadfile']['tmp_name'], $pic_path); 
 } 
 $size = round($picsize/1024,2); //转换成kb 
 echo '{"status":1,"name":"'.$picname.'","url":"'.$pic_path.'","size":"'.$size.'","content":"上传成功"}';

demo下载: php-ajax-upload_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
提升PHP执行速度全攻略
Oct 09 PHP
无限级别菜单的实现
Oct 09 PHP
php实现用户在线时间统计详解
Oct 08 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
php静态文件返回304技巧分享
Jan 06 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
PHP 匿名函数与注意事项详细介绍
Nov 26 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
php报错502badgateway解决方法
Oct 11 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 #PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 #PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 #PHP
php实现XML和数组的相互转化功能示例
Feb 08 #PHP
PHP 获取指定地区的天气实例代码
Feb 08 #PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 #PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 #PHP
You might like
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python元组操作实例解析
2014/09/23 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python3使用GUI统计代码量
2019/09/18 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
python实现滑雪游戏
2020/02/22 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
2015年度考核个人工作总结
2015/10/24 职场文书