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 相关文章推荐
10个实用的PHP代码片段
Sep 02 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
ThinkPHP分页实例
Oct 15 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
php简单获取复选框值的方法
May 11 PHP
浅谈PHP的反射机制
Dec 15 PHP
PHP实现表单提交时去除斜杠的方法
Dec 26 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 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
php session安全问题分析
2011/06/24 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php常用文件操作函数汇总
2014/11/22 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
Convert Seconds To Hours
2007/06/16 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
React进阶学习之组件的解耦之道
2017/08/07 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
Python中的with...as用法介绍
2015/05/28 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python做文本按行去重的实现方法
2016/10/19 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
用Python配平化学方程式的方法
2019/07/20 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
2014年科协工作总结
2014/12/09 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
MySQL优化之慢日志查询
2022/06/10 MySQL
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python