zoukankan      html  css  js  c++  java
  • 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

    生活因朋友而精彩

  • 相关阅读:
    软件定义网络实验七:OpenDaylight 实验——Python中的REST API调用+选做
    软件定义网络实验六:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
    软件定义网络实验五:OpenFlow协议分析和OpenDaylight安装
    软件定义网络实验四:Open vSwitch 实验——Mininet 中使用 OVS 命令
    第一次个人编程作业
    软件定义网络实验三:Mininet 实验——拓扑的命令脚本生成
    软件定义网络实验二:Mininet 实验——拓扑的命令脚本生成
    软件定义网络实验一:Mininet源码安装和可视化拓扑工具
    第一次博客作业
    第一次个人编程作业
  • 原文地址:https://www.cnblogs.com/plummoon/p/1226148.html
Copyright © 2011-2022 走看看