php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析


Posted in PHP onFebruary 28, 2020

本文实例讲述了php 下 html5 XHR2 + FormData + File API 上传文件操作。分享给大家供大家参考,具体如下:

FormData的作用:

FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单。当然FormData也可以动态的append数据。FormData的最大优点就是我们可以异步上传一个二进制文件。

例1如下:

<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <form method="post" id="myForm" onsubmit="return post();">
    用户名<input type="text" name="uname" />
    密码<input type="password" name="upwd" />
    邮箱<input type="text" name="uemail" />
    <input type="submit" name="submit" value="提交" />
  </form>
</body>
<script type="text/javascript">
function post() {
  var myForm = document.getElementById("myForm");
  //FormData既可以从表单读取数据,也可以动态append(键,值)添加
  var fd = new FormData(myForm);

  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      alert(this.responseText);
    }
  };
  xhr.open("post", "post.php", true);
  xhr.send(fd);
  return false;
}
</script>
</html>

File API

使用HTML5 DOM新增的File API,现在可以让网页要求用户选择本地文件,并且读取这些文件的信息了。

通过File API,我们可以在用户选取一个或者多个文件之后,访问到代表了所选文件的一个或多个File对象,这些对象被包含在一个FileList对象中。

<!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>
</body>
<script type="text/javascript">
  var upfile = document.getElementById("upfile");
  upfile.onchange = function() {
    var file = this.files[0];
    alert("文件名:" + file.name + "\r\n" + "大小:" + file.size + "\r\n");
  };
</script>
</html>

我们通过FormData + File API 上传文件

<!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>
</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);
    //发送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";
}

使用对象URL来显示你所选择的图片

通过window.URL.createObjectURL()和 window.URL.revokeObjectURL()两个DOM方法。

这两个方法创建简单的URL字符串对象,用于指向任何 DOM File 对象数据,包括用户电脑中的本地文件。

<!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>
</body>
<script type="text/javascript">
  var myForm = document.getElementById("myForm");
  var upfile = document.getElementById("upfile");

  upfile.onchange = function() {
    //创建一个img标签
    var img = document.createElement("img");
    //通过file对象创建对象URL
    img.src = window.URL.createObjectURL(this.files[0]);
    img.height = 60;
    img.onload = function() {
      //释放对象URL
      window.URL.revokeObjectURL(this.src);
    };
    document.body.appendChild(img);
  };

  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);
    //发送FormData对象
    xhr.send(fd);
    return false;
  };
</script>
</html>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
php cookies中删除的一般赋值方法
May 07 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
php操作mysqli(示例代码)
Oct 28 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP常用处理静态操作类
Apr 03 PHP
php目录拷贝实现方法
Jul 10 PHP
简单实现PHP留言板功能
Dec 21 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
php的无刷新操作实现方法分析
Feb 28 #PHP
php下的原生ajax请求用法实例分析
Feb 28 #PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 #PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 #PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 #PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 #PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 #PHP
You might like
实用函数4
2007/11/08 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
jquery实现上传图片功能
2020/06/29 jQuery
Python中用于计算对数的log()方法
2015/05/15 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
军训生自我鉴定范文
2013/12/27 职场文书
项目总经理岗位职责
2014/02/14 职场文书
母婴店促销方案
2014/03/05 职场文书
秋天的雨教学反思
2014/04/27 职场文书
感恩之星事迹材料
2014/05/03 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
教师节联欢会主持词
2015/07/04 职场文书