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中的正规表达式(二)
Oct 09 PHP
PHP 字符串分割和比较
Oct 06 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
php curl post 时出现的问题解决
Jan 30 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 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 判断变量类型实现代码
2009/10/23 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
JS实现简易计算器
2020/02/14 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
dpn网络的pytorch实现方式
2020/01/14 Python
Python如何输出警告信息
2020/07/30 Python
python中的列表和元组区别分析
2020/12/30 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
什么是索引指示器
2012/08/20 面试题
《月亮湾》教学反思
2014/04/14 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
合作意向协议书
2015/01/29 职场文书
幼儿园教师教学反思
2016/03/02 职场文书