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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP面向对象概念
Nov 06 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
PHP unset函数原理及使用方法解析
Aug 14 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
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php验证码实现代码(3种)
2015/09/07 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
Python回调函数用法实例详解
2015/07/02 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
本科生学习总结的自我评价
2013/10/02 职场文书
大学生新学期计划书
2014/04/28 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
物理学专业求职信
2014/07/04 职场文书
社区创先争优承诺书
2014/08/30 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
实习证明格式范文
2015/06/16 职场文书
班级管理经验交流材料
2015/11/02 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
年终工作总结范文
2019/06/20 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
mysql sock 文件解析及作用讲解
2022/07/15 MySQL