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自动跳转中英文页面
Jul 29 PHP
php生成缩略图的类代码
Oct 02 PHP
将php数组输出html表格的方法
Feb 24 PHP
php分页函数示例代码分享
Feb 24 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
详细解读PHP的Yii框架中登陆功能的实现
Aug 21 PHP
windows下apache搭建php开发环境
Aug 27 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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操作redis缓存方法分享
2015/06/03 PHP
php抽象类用法实例分析
2015/07/07 PHP
iOS10推送通知开发教程
2016/09/19 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
Python subprocess库的使用详解
2018/10/26 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
如何基于python测量代码运行时间
2019/12/25 Python
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
公司授权委托书范本
2014/04/03 职场文书
安全口号大全
2014/06/21 职场文书
活动总结范文
2014/08/30 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
vue实现简易音乐播放器
2022/08/14 Vue.js