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 相关文章推荐
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
PHP OPCode缓存 APC详细介绍
Oct 12 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
PHP通过API获取手机号码归属地
May 28 PHP
php给图片加文字水印
Jul 31 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
Laravel find in set排序实例
2019/10/09 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
深入研究React中setState源码
2017/11/17 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
Python读取word文本操作详解
2018/01/22 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
公务员诚信承诺书
2014/05/26 职场文书
本科应届生求职信
2014/08/05 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
志愿者个人总结
2015/03/03 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS