Gmail客户端详细架构之二:象Gmail一样上传文件

  Gmail上传文件提供给我们很多证据,证明使用AJAX和iframes是web 2.0应用不可避免的。Gmail是最先进的web应用之一,让古老的在线email服务焕发的新生。这一篇文章中我们将看看gmail是如何在emal中上传文件的。

这是Gmail客户端详细架构系列的第二篇,第一篇请看:Gmail客户端详细架构之一

这一篇文章中我们将看看gmail是如何在emal中上传文件的。到处都是AJAX,AJAX能够带来良好的用户体验,尤其能预先完成用户准备执行的动作。

Gmail上传文件提供给我们很多证据,证明使用AJAX和iframes是web 2.0应用不可避免的。Gmail是最先进的web应用之一,让古老的在线email服务焕发的新生。



上面是Gmail的创建新邮件界面。

当你选择好了你的email需要附带的文件,然后开始写email正文,当你的email还没有完成,gmail的文件上传已经结束了,这是怎样实现的呢?

首先这不是使用你常用的multipart/form-data AJAX模式,Gmail使用了iframe来上传附件,它通过代码:style=”display:none” 隐藏了这个iframe

Js代码
  1. <form target="iframename" action="upload.php">   


为了模仿动态AJAX效果更新你的界面,在upload.php文件最后部分添加了JavaScript

Js代码
  1. <?php   
  2. $target_path = "upload/";   
  3.   
  4. $target_path = $target_path . basename( $_FILES['filefieldname']['name']);    
  5.   
  6. if(move_uploaded_file($_FILES['filefieldname']['tmp_name'], $target_path)) {   
  7.     echo "The file ".  basename( $_FILES['uploadedfile']['name']).    
  8.     " has been uploaded";   
  9. else{   
  10.     echo "There was an error uploading the file, please try again!";   
  11. }?>   
  12. <script>   
  13. parent.document.getElementById('uploadedfile').innerHTML += '   
  14. <a href="upload/<?php echo $_FILES['filefieldname']['name'] ?>"><?php echo $_FILES['filefieldname']['name'] ?></a>';   
  15. </script>  


于是你的界面文件包含这个iframe,并且用upload.php来上传文件

Js代码
  1. <?php   
  2. <form  target="hiddenframe" enctype="multipart/form-data" action="upload.php" method="POST" name="uploadform">   
  3. <p>   
  4.   <label>To:   
  5.   <input name="textfield2" type="text" id="textfield2" size="60" maxlength="60" />   
  6.   
  7.   Subject:     
  8.   <input name="textfield" type="text" id="textfield" size="60" maxlength="60" />   
  9.   
  10.   Attach File:   
  11.   <input type="file" name="filefieldname" id="fileField"   onchange="document.uploadform.submit()"/>   
  12.   </label>   
  13. </p>   
  14. <p id="uploadedfile" >   
  15.   <label></label>   
  16. </p>   
  17. <p>   
  18.   <label>   
  19.   <input type="submit" name="button" id="button" value="Submit" />   
  20.   </label>   
  21. </p>   
  22. <iframe name="hiddenframe" style="display:none" >Loading...</iframe>   
  23. </form>  


你可以在这里下载所有的源文件:http://www.sajithmr.com/wp-content/uploads/2007/11/file-upload-like-gmail.rar

参考:Upload Files Like Gmail
原文:dzone.com
来自:http://www.javaeye.com/news/2608

生活因朋友而精彩

原文地址:https://www.cnblogs.com/plummoon/p/1226148.html