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
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
深入php处理整数函数的详解
Jun 09 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
基于laravel Request的所有方法详解
Sep 29 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
php屏蔽错误及提示的方法
May 10 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
php实现通过ftp上传文件
2015/06/19 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python 可爱的大小写
2008/09/06 Python
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
python读取oracle函数返回值
2016/07/18 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python搜索包的路径的实现方法
2019/07/19 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
tensorflow之并行读入数据详解
2020/02/05 Python
在python中修改.properties文件的操作
2020/04/08 Python
pandas数据拼接的实现示例
2020/04/16 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
店长岗位的工作内容
2013/11/12 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
淘宝客服工作职责
2014/07/11 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
2015年路政工作总结
2015/05/22 职场文书
运动会通讯稿50字
2015/07/20 职场文书
高一地理教学工作总结
2015/08/12 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书