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实现mysql同步的实现方法
Oct 21 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
Laravel框架表单验证详解
Sep 04 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
php生成shtml类用法实例
Dec 09 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
php文件上传原理与实现方法详解
Dec 20 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时间戳使用实例代码
2008/06/07 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
js 对象是否存在判断
2009/07/15 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
node中modules.exports与exports导出的区别
2018/06/08 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
Python学习之用pygal画世界地图实例
2017/12/07 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
上海期货面试题
2014/01/31 面试题
优秀中专生推荐信
2013/11/17 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2015年工程师工作总结
2015/04/30 职场文书
2015年语言文字工作总结
2015/07/23 职场文书