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 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
yii用户注册表单验证实例
Dec 26 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 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网站提速三大“软”招
2006/10/09 PHP
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
PHP 高级课程笔记 面向对象
2009/06/21 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
php实现微信支付之现金红包
2018/05/30 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
js判断节假日实例代码
2017/12/27 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
Django rest framework实现分页的示例
2018/05/24 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
pytorch 求网络模型参数实例
2019/12/30 Python
优秀的导游求职信范文
2014/04/06 职场文书
吨的认识教学反思
2014/04/27 职场文书
化工专业求职信
2014/07/01 职场文书
庆元旦活动总结
2014/07/09 职场文书
中秋节活动总结
2014/08/29 职场文书
股权转让协议书
2014/12/07 职场文书
导游词格式
2015/02/13 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python Matplotlib库实现画局部图
2021/11/17 Python