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 网络开发详解之远程文件包含漏洞
Apr 25 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
深入PHP FTP类的详解
Jun 13 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 PHP
详解PHP神奇又有用的Trait
Mar 25 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访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
10个php函数实用却不常见
2015/10/13 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
javascript每日必学之继承
2016/02/23 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python如何使用unittest测试接口
2018/04/04 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
python实现Zabbix-API监控
2018/09/17 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
python如何保证输入键入数字的方法
2019/08/23 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
九年级政治教学反思
2014/02/06 职场文书
拓展训练激励口号
2014/06/17 职场文书
运动会演讲稿200字
2014/08/25 职场文书
老兵退伍感言
2015/08/03 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书