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 相关文章推荐
Discuz 模板语句分析及知识技巧
Aug 21 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
php的XML文件解释类应用实例
Sep 22 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 PHP
PHP单元测试配置与使用方法详解
Dec 27 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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测试硬盘写入速度示例
2014/01/27 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
python插入排序算法实例分析
2015/07/03 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python 循环数据赋值实例
2019/12/02 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
flask开启多线程的具体方法
2020/08/02 Python
python 实现音频叠加的示例
2020/10/29 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
如何掌握自荐信格式呢
2013/11/19 职场文书
销售冠军获奖感言
2014/02/03 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
物流专业求职信
2014/06/30 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
门店店长岗位职责
2015/04/14 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android