php实现简单的上传进度条


Posted in PHP onNovember 17, 2015

Web上传文件的三种解决方案分享给大家:

php实现简单的上传进度条

这里我要使用的是form法。通过为表单元素设置enctype=”multipart/form-data”属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。

表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:

 php实现简单的上传进度条

在网上找到了两种方式,PHP配合apc实现和利用uploadprogress实现,这次我要使用的是uploadprogress,点击地址可以下载到php相应版本的dll。安装php_uploadprogress.dll扩展,重启apache。

php实现简单的上传进度条

进度条实现原理:

php实现简单的上传进度条

这里用到了一个iframe无刷新上传文件的方法。

php实现简单的上传进度条

上传完成后的样子如图:

<body>
  <div style="padding:20px">
   <form action="action.php" enctype="multipart/form-data" method="post" target="iframeUpload">
    <iframe name="iframeUpload" width="400" height="400" frameborder='1'></iframe>
    <input type="hidden" name="UPLOAD_IDENTIFIER" value="1" />
    <input id="file1" name="file1" type="file"/> 
    <input value="上传" type="submit" onclick="startProgress()"/> 
   </form>
  </div>
  <div style="width: 500px; height: 20px;border:1px solid red"> 
   <div style="position: relative; height: 20px; background-color: purple; width: 0%;" class="barinner"></div>
  </div>
  <div id='showNum'></div>
  <div class="prbar">
   <div class="prpos barinner"></div>
  </div>
 </body>

上面的HTML代码中要注意下UPLOAD_IDENTIFIER,这个是用来定位查看哪个文件的上传进度的。我这里就写死为一个1,大家可以写成一个php生成的随机数。下面是JS脚本:

var proNum=0; 
  var loop=0; 
  var progressResult = ""; 
  var interval; 
  function sendURL() { 
   $.ajax({ 
    type : 'GET', 
    url : "getprogress.php", 
    async : true, 
    cache : false, 
    dataType : 'json',
    data: "progress_key=" + $('input[name=UPLOAD_IDENTIFIER]').val(),
    success : function(e) { 
     proNum=parseInt(e); 
     if(e){ 
      $('.barinner').css('width', proNum+"%");
      $('#showNum').html(proNum+"%");
      setTimeout("getProgress()", 200); 
   
     }else{ 
      if(interval == 1){ 
       $('.barinner').css('width', "100%");
       $('#showNum').html("100%");
      } 
     }
    } 
   }); 
  } 
  function getProgress(){ 
   loop++; 
   sendURL(); 
  } 
  function startProgress(){ 
   interval = 1;
   $('.barinner').css('width', proNum+"%"); 
   $('#showNum').html(proNum+"%");
  setTimeout("getProgress()", 500); 
  }

下面是getprogress.php文件中的内容:

<?php 
 if (function_exists("uploadprogress_get_info")) {
  $info = uploadprogress_get_info($_GET['progress_key']);
  if(!empty($info)){
   if(($info['bytes_uploaded'] < $info['bytes_total']) && !empty($info['bytes_uploaded']) && !empty($info['bytes_total'])){
    $proNum = floor(($info['bytes_uploaded']/$info['bytes_total'])*100);  
   }else{
    $proNum = 100;
   }
   echo $proNum;
  }else{
   echo 0;
  }
 }

在上传完成后,我展示了两种进度条的CSS,第二种是用最新的CSS3写的。用到了一些CSS3的动画属性。

php实现简单的上传进度条

.prbar {
  margin:5px;
  width:500px;
  background-color:#dddddd;
  overflow:hidden;
  
  /* 边框效果 */
  border: 1px solid #bbbbbb;
  -moz-border-radius: 15px;
  border-radius: 15px;
    
  /* 为进度条增加阴影效果 */
  -webkit-box-shadow: 0px 2px 4px #555555;
  -moz-box-shadow: 0px 2px 4px #555555;
  box-shadow: 0px 2px 4px #555555;   
 }
 /* No rounded corners for Opera, because the overflow:hidden dont work with rounded corners */
 doesnotexist:-o-prefocus, .prbar {
 border-radius:0px;
 }
 .prpos {
  width:0%;
  height:30px;
  background-color:#3399ff;
  border-right:1px solid #bbbbbb;
  /* CSS3 进度条渐变 */
  transition: width 2s ease;
  -webkit-transition: width 0s ease;
  -o-transition: width 0s ease;
  -moz-transition: width 0s ease;
  -ms-transition: width 0s ease;
  /* CSS3 Stripes */
  background-image: linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -moz-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -ms-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -o-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -webkit-gradient(linear, 100% 100%, 0 0,color-stop(.25, #99ccff), color-stop(.25, #3399ff),color-stop(.5, #3399ff),color-stop(.5, #99ccff),color-stop(.75, #99ccff),color-stop(.75, #3399ff),color-stop(1, #3399ff));
  background-image: -webkit-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-size: 40px 40px;
  /* Background stripes animation */
  animation: bganim 3s linear 2s infinite;
  -moz-animation: bganim 3s linear 2s infinite;
  -webkit-animation: bganim 3s linear 2s infinite;
  -o-animation: bganim 3s linear 2s infinite;
  -ms-animation: bganim 3s linear 2s infinite;
 }
 @keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-moz-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-webkit-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-o-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-ms-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php分页查询的简单实现代码
Mar 14 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 PHP
PHP安装threads多线程扩展基础教程
Nov 17 #PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 #PHP
教大家制作简单的php日历
Nov 17 #PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 #PHP
PHP Yii框架之表单验证规则大全
Nov 16 #PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 #PHP
yii添删改查实例
Nov 16 #PHP
You might like
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
PHP个人网站架设连环讲(二)
2006/10/09 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
JS解析XML实例分析
2015/01/30 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
Bootstrap精简教程
2015/11/27 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
python getopt详解及简单实例
2016/12/30 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
重大事项社会稳定风险评估方案
2014/06/15 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
稽核岗位职责范本
2015/04/13 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
python脚本框架webpy模板控制结构
2021/11/20 Python
python3中apply函数和lambda函数的使用详解
2022/02/28 Python