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 输出简单动态WAP页面
Jun 09 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php引用返回与取消引用的详解
Jun 08 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
Apr 28 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
php使用文本统计访问量的方法
May 12 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
PHP静态成员变量
Feb 14 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 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
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
javascript replace方法与正则表达式
2008/02/19 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
对于js垃圾回收机制的理解
2017/09/14 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
python基础教程之字典操作详解
2014/03/25 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
Python shutil模块用法实例分析
2019/10/02 Python
结束运行python的方法
2020/06/16 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
中文专业毕业生自荐书范文
2014/01/04 职场文书
班队活动设计方案
2014/01/30 职场文书
农业开发项目建议书
2014/05/16 职场文书
升学宴演讲稿
2014/09/01 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
python中使用redis用法详解
2022/12/24 Redis