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小偷的核心程序
Apr 09 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php中如何执行linux命令详解
Nov 06 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 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
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
浅谈python numpy中nonzero()的用法
2018/04/02 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python enumerate内置库用法解析
2020/02/24 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
爱国演讲稿400字
2014/05/07 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL