首页 > 代码库 > 关于异步文件上传和文件表单元素的复制、设置和清除

关于异步文件上传和文件表单元素的复制、设置和清除

一、解决文件异步上传的方法有3种:1.使用iframe 2.使用FormData(html5新功能)  3.使用flash

1.使用iframe

原来我以为使用iframe是把整个表单复制到iframe里面,然后把iframe里面的表单提交给服务器,这样来实现表单的异步上传。最后我想错了,实现原理比我想的要简单的多。先看一下代码:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3   <head> 4     <title>starting page, simple test</title> 5      6     <meta http-equiv="pragma" content="no-cache"> 7     <meta http-equiv="cache-control" content="no-cache"> 8     <meta http-equiv="expires" content="0">     9     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">10     <meta http-equiv="description" content="This is my page">11     <!--12     <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">13     -->14 15   </head>16   17   <body>18     <form id="upload-form" target="postForm" action="http://localhost:8080/spring/upload/file" method="post" enctype="multipart/form-data">19         <input type="file" name="file"/>20         <iframe name="postForm" frameborder="0" style="display: none;"></iframe>21         <button type="submit" id="cd-button">提交</button>22     </form>23     24   </body>25 </html>

其中关键在于:form表单的target和iframe的target的使用,两个target名称一致。form表单在本页提交信息,要求服务器返回信息给对应target的值的iframe。所以当前也没不刷新,只是让iframe刷新了。这种方式最先于yahoo开创使用,向YAHOO致敬(hat tip to YAHOO!)

至于取得在iframe里的响应信息,这里我就不在详述。

2.使用FormData

FormData的详细解说:http://www.cnblogs.com/rubylouvre/archive/2011/04/26/2028827.html 向大牛学习,我就不献丑了。

3.使用flash

使用flash方式上传的教程网上有很多,比如:swfupload 等,可以去网上搜一下,就能看到了。

 

二、对于复制或者设置和清除file表单元素

1.复制和设置file表单元素

出于安全考虑,file表单元素是不能被复制和设置的。对比三大浏览器复制和设置file表单元素

浏览器  firefoxgoogle chromeIE
设置
复制

 

 

 

目前测试的只有firefox支持选择文件后复制文件表单,文件表单一样有用。如果需要把本表单的file复制到另外一个表单上,可以用乾坤大挪移

新建的file表单元素是没有值的。

2.清除file表单元素的值

看上面为file值设置,不充许。但是为file设置为""的时候确是firefox允许,所以firefox的jquery代码写法为:$(‘input[name=file]‘).val(‘‘);

chrome,ie 的jquery代码写法为$(‘input[name=file]‘).replaceWith($(‘input[name=file]‘).clone());