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设计聊天室步步通
Oct 09 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
php 过滤器实现代码
Aug 09 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
PHP+ajax分页实例简析
Dec 07 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
TP5框架安全机制实例分析
Apr 05 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文件注释标记及规范小结
2012/04/01 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
python关闭windows进程的方法
2015/04/18 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
python3人脸识别的两种方法
2019/04/25 Python
python 类之间的参数传递方式
2019/12/20 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
如何通过jdbc调用存储过程
2012/04/19 面试题
快递业务员岗位职责
2014/01/06 职场文书
有关打架的检讨书
2014/01/25 职场文书
应届生找工作求职信
2014/06/24 职场文书
升国旗演讲稿
2014/09/05 职场文书
2014年稽查工作总结
2014/12/20 职场文书
2015年体育部工作总结
2015/04/02 职场文书
女儿满月酒致辞
2015/07/29 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android