php 使用html5 XHR2实现上传文件与进度显示功能示例


Posted in PHP onMarch 03, 2020

本文实例讲述了php 使用html5 XHR2实现上传文件与进度显示功能。分享给大家供大家参考,具体如下:

思路:只要我们知道上传文件的总大小,还有上传过程中上传文件的大小,那么就可以实现进度显示了。

在html5中,XMLHttpRequest对象,传送数据的时候,progress事件用来返回进度信息。

它分成上传和下载两种情况

1.下载的progress事件属于XMLHttpRequest对象
2.上传的progress事件属于XMLHttpRequest.upload对象。

与progress事件相关的,还有其他五个事件:

1.load事件:传输成功完成。
2.abort事件:传输被用户取消。
3.error事件:传输中出现错误。
4.loadstart事件:传输开始。
5.loadEnd事件:传输结束,但是不知道成功还是失败。

<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <form method="post" id="myForm">
    <input type="file" name="file" id="upfile" />
    <input type="submit" name="submit" value="提交" />
  </form>
  <div id="upStatus"></div>
</body>
<script type="text/javascript">
  var myForm = document.getElementById("myForm");
  var upfile = document.getElementById("upfile");

  myForm.onsubmit = function() {
    //我们创建一个FormData对象
    var fd = new FormData();
    var file = upfile.files[0];
    //把文件添加到FormData对象中
    fd.append("file", file);

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
      if (xhr.readyState == 4) {
        alert(this.responseText);
      }
    };
    xhr.open("post", "upfile.php", true);

    //监听上传事件
    xhr.upload.onprogress = function(ev) {
      //如果长度是可计算的
      if(ev.lengthComputable) {
        var percent = Math.round((ev.loaded / ev.total) * 100);
        document.getElementById("upStatus").innerHTML = percent + "%";
      }
    };

    //发送FormData对象
    xhr.send(fd);
    return false;
  };
</script>
</html>

upfile.php代码如下:

<?php
$uploadDir = './upload/';
if(!file_exists($uploadDir)) {
  @mkdir($uploadDir, 0777, true);
}
$uploadFile = $uploadDir . basename($_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
  echo "OK";
} else {
  echo "NO";
}

如果上传过程中PHP出现如下信息:

Warning: POST Content-Length of 625523488 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

说明文件大小超出了PHP设置限制,可以设置php.ini

;脚本解析输入数据(类似 POST 和 GET)允许的最大时间,单位是秒。

;它从接收所有数据到开始执行脚本进行测量的。
max_input_time = 60

;允许客户端单个POST请求发送的最大数据
post_max_size = 64M

;是否开启文件上传功能
file_uploads = On

;文件上传的临时存放目录(如果不指定,使用系统默认的临时目录)
;upload_tmp_dir =

;允许单个请求上传的最大文件大小
upload_max_filesize = 64M

;允许单个POST请求同时上传的最大文件数量
max_file_uploads = 20

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php读取html并截取字符串的简单代码
Nov 30 PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
PHP常用的缓存技术汇总
May 05 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
smarty简单分页的实现方法
Oct 27 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
php+ajax实现文件切割上传功能示例
Mar 03 #PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 #PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 #PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 #PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 #PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
You might like
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
offsetParent 算法分析
2010/04/05 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python对文件操作知识汇总
2016/05/15 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python变量访问权限控制详解
2019/06/29 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
电子商务专业毕业生求职信
2014/06/12 职场文书
学习张林森心得体会
2014/09/10 职场文书
运动会开幕式致辞
2015/07/29 职场文书
2016年情人节问候语
2015/11/11 职场文书