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 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
php 随机排序广告的实现代码
May 09 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
PHP文件操作实例总结
Sep 27 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
PHP多维数组排序array详解
Nov 21 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php密码生成类实例
2014/09/24 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
js版本A*寻路算法
2006/12/22 Javascript
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
jquery延迟对象解析
2016/10/26 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
Python中对象的引用与复制代码示例
2017/12/04 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
英格兰足协官方商店:England Store
2019/07/12 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
关于廉洁的广播稿
2014/01/30 职场文书
毕业自我评价
2014/02/05 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
购房个人委托书范本
2014/10/11 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
创业计划书之校园超市
2019/09/12 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js