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 Mysql类 可以参考学习熟悉下
Jun 21 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
PHP异步调用socket实现代码
Jan 12 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
QQ互联一键登录审核不通过的解决方案
Sep 10 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
Yii框架模拟组件调用注入示例
Nov 11 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 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的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
jquery处理json对象
2014/11/03 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
Angular排序实例详解
2017/06/28 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python实现ip代理池功能示例
2019/07/05 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
python可以用哪些数据库
2020/06/22 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
什么是Python包的循环导入
2020/09/08 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
机电专业求职信
2014/06/14 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
Golang入门之计时器
2022/05/04 Golang
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android