当前位置:首页 > PHP教程 > php上传下载 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-15 10:30:56 浏览: 评论:0 

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

FormData的作用:

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

例1如下:

  1. <!DOCTYPE HTML> 
  2. <html lang="zh-CN"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <title></title> 
  6. </head> 
  7. <body> 
  8.   <form method="post" id="myForm" onsubmit="return post();"
  9.     用户名<input type="text" name="uname" /> 
  10.     密码<input type="password" name="upwd" /> 
  11.     邮箱<input type="text" name="uemail" /> 
  12.     <input type="submit" name="submit" value="提交" /> 
  13.   </form> 
  14. </body> 
  15. <script type="text/javascript"
  16. function post() { 
  17.   var myForm = document.getElementById("myForm"); 
  18.   //FormData既可以从表单读取数据,也可以动态append(键,值)添加 
  19.   var fd = new FormData(myForm); 
  20.  
  21.   var xhr = new XMLHttpRequest(); 
  22.   xhr.onreadystatechange = function () { 
  23.     if (xhr.readyState == 4) { 
  24.       alert(this.responseText); 
  25.     } 
  26.   }; 
  27.   xhr.open("post""post.php", true); 
  28.   xhr.send(fd); 
  29.   return false; 
  30. </script> 
  31. </html> 

File API

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

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

  1. <!DOCTYPE HTML> 
  2. <html lang="zh-CN"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <title></title> 
  6. </head> 
  7. <body> 
  8.   <form method="post" id="myForm"
  9.     <input type="file" name="file" id="upfile" /> 
  10.     <input type="submit" name="submit" value="提交" /> 
  11.   </form> 
  12. </body> 
  13. <script type="text/javascript"
  14.   var upfile = document.getElementById("upfile"); 
  15.   upfile.onchange = function() { 
  16.     var file = this.files[0]; 
  17.     alert("文件名:" + file.name + "\r\n" + "大小:" + file.size + "\r\n"); 
  18.   }; 
  19. </script> 
  20. </html> 

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

  1. <!DOCTYPE HTML> 
  2. <html lang="zh-CN"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <title></title> 
  6. </head> 
  7. <body> 
  8.   <form method="post" id="myForm"
  9.     <input type="file" name="file" id="upfile" /> 
  10.     <input type="submit" name="submit" value="提交" /> 
  11.   </form> 
  12. </body> 
  13. <script type="text/javascript"
  14.   var myForm = document.getElementById("myForm"); 
  15.   var upfile = document.getElementById("upfile"); 
  16.  
  17.   myForm.onsubmit = function() { 
  18.     //我们创建一个FormData对象 
  19.     var fd = new FormData(); 
  20.     var file = upfile.files[0]; 
  21.     //把文件添加到FormData对象中 
  22.     fd.append("file", file); 
  23.  
  24.     var xhr = new XMLHttpRequest(); 
  25.     xhr.onreadystatechange = function () { 
  26.       if (xhr.readyState == 4) { 
  27.         alert(this.responseText); 
  28.       } 
  29.     }; 
  30.     xhr.open("post""upfile.php", true); 
  31.     //发送FormData对象 
  32.     xhr.send(fd); 
  33.     return false; 
  34.   }; 
  35. </script> 
  36. </html> 

upfile.php代码如下:

  1. <?php 
  2. $uploadDir = './upload/'
  3. if(!file_exists($uploadDir)) { 
  4.   @mkdir($uploadDir, 0777, true); 
  5. $uploadFile = $uploadDir . basename($_FILES['file']['name']); 
  6. if(move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) { 
  7.   echo "OK"
  8. else { 
  9.   echo "NO"

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

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

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

  1. <!DOCTYPE HTML> 
  2. <html lang="zh-CN"> 
  3. <head> 
  4.   <meta charset="UTF-8"> 
  5.   <title></title> 
  6. </head> 
  7. <body> 
  8.   <form method="post" id="myForm"> 
  9.     <input type="file" name="file" id="upfile" /> 
  10.     <input type="submit" name="submit" value="提交" /> 
  11.   </form> 
  12. </body> 
  13. <script type="text/javascript"> 
  14.   var myForm = document.getElementById("myForm"); 
  15.   var upfile = document.getElementById("upfile"); 
  16.  
  17.   upfile.onchange = function() { 
  18.     //创建一个img标签 
  19.     var img = document.createElement("img"); 
  20.     //通过file对象创建对象URL 
  21.     img.src = window.URL.createObjectURL(this.files[0]); 
  22.     img.height = 60
  23.     img.onload = function() { 
  24.       //释放对象URL 
  25.       window.URL.revokeObjectURL(this.src); 
  26.     }; 
  27.     document.body.appendChild(img); 
  28.   }; 
  29.  
  30.   myForm.onsubmit = function() { 
  31.     //我们创建一个FormData对象 
  32.     var fd = new FormData(); 
  33.     var file = upfile.files[0]; 
  34.     //把文件添加到FormData对象中 
  35.     fd.append("file", file); 
  36.  
  37.     var xhr = new XMLHttpRequest(); 
  38.     xhr.onreadystatechange = function () { 
  39.       if (xhr.readyState == 4) { 
  40.         alert(this.responseText); 
  41.       } 
  42.     }; 
  43.     xhr.open("post", "upfile.php", true); 
  44.     //发送FormData对象 
  45.     xhr.send(fd); 
  46.     return false; 
  47.   }; 
  48. </script> 
  49. </html>

Tags: html5上传文件 XHR2 FormData

分享到: