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之对抗Web扫描器的脚本技巧
Oct 01 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
php单一接口的实现方法
Jun 20 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
php封装一个异常的处理类
Jun 08 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
PHP经典设计模式之依赖注入定义与用法详解
May 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新浪微博登录接口用法实例
2014/12/23 PHP
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
vue中SPA单页面应用程序详解
2017/11/07 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
详解在Python程序中自定义异常的方法
2015/10/16 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
简短的公司员工自我评价分享
2013/11/13 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
Python+DeOldify实现老照片上色功能
2022/06/21 Python
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript