ajax方式提交带文件上传的表单

一般的表单都是通过ajax方式提交,所以碰到带文件上传的表单就比较麻烦。基本原理就是在页面增加一个隐藏iframe,然后通过ajax提交除文件之外的表单数据,在表单数据提交成功之后的回调函数中,通过form单独提交文件,而这个提交文件的form的target就指向前述隐藏的iframe。

html 代码

<html>   

<body>   

  

<form action="upload.jsp" id="form1" name="form1"encType="multipart/form-data"  method="post"target="hidden_frame">   

    <inputtype="file" id="file" name="file"style="width:450">   

    <INPUTtype="submit" value="上传文件"><spanid="msg"></span>   

   <br>   

    <fontcolor="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传</font>                 

    <iframe name='hidden_frame' id="hidden_frame"style='display:none'></iframe>   

</form>   

  

</body>   

</html>   

  

<scripttype="text/javascript">   

functioncallback(msg)   

{   

   document.getElementByIdx_x_x("file").outerHTML =document.getElementByIdx_x_x("file").outerHTML;   

   document.getElementByIdx_x_x("msg").innerHTML = "<fontcolor=red>"+msg+"</font>";   

}   

</script>

index.html 中主要要做的就是写一个 form和 iframe ,并把 form 的 target 设为 iframe的名字,注意要把 iframe设为不可见,其他的都是正常的文件上传的写法,这样刷新的页面就是这个隐藏的 Iframe ,而在index.html中是不会有页面刷新的,js的callback方法是回调方法。用于清空文件上传框和显示后台信息,注意清空文件上传框的方法,和普通方法有点不一样。

--upload.jsp9Dhjsp 代码

<%@ page language="java" contentType="text/html; charset=gb2312"%>   

<%@ pageimport="com.jspsmart.upload.SmartUpload"%>   

  

<%   

   //新建一个SmartUpload对象   

    SmartUploadsu = newSmartUpload();   

  

   //上传初始化   

   su.initialize(pageContext);   

  

    //设定上传限制   

   //1.限制每个上传文件的最大长度。   

   su.setMaxFileSize(10000000);   

  

   //2.限制总上传数据的长度。   

   su.setTotalMaxFileSize(20000000);   

  

   //3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。   

   su.setAllowedFilesList("doc,txt,jpg,rar,mid,waw,mp3,gif");   

       

    boolean sign= true;   

       

   //4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有扩展名的文件。   

    try{   

       su.setDeniedFilesList("exe,bat,jsp,htm,html");   

  

       //上传文件   

       su.upload();   

       //将上传文件保存到指定目录   

       su.save("c://");  

 

    } catch(Exception e) {  

       e.printStackTrace();  

       sign = false;  

   }  

   if(sign==true)  

   {  

       out.println("<script>parent.callback('upload filesuccess')</script>");  

   }else  

   {  

       out.println("<script>parent.callback('uploadfileerror')</script>");   

   }   

%>   

upload.jsp 中只要注意最后输出的格式就可以了。其实原理就是输出一段js代码到 iframe中,然后在iframe中来控制它的父页面。

OK,至此一个无刷新的页面上传组件就做好了,不要忘了在 WEB-INF/lib 下加上必须的jspSmartUpload.jar 包。

需要说明的是使用Iframe来上传,状态栏还是会有刷新的,因为iframe中的页面刷新了嘛,但是外部页面,就是你所看到的页面是没有刷新的,所以也可以说是类似Ajax上传。

ajax方式提交带文件上传的表单,上传后不跳转的更多相关文章

  1. 文件的上传(表单上传和ajax文件异步上传)

    项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...

  2. 普通文件的上传(表单上传和ajax文件异步上传)

    一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...

  3. PHP流式上传和表单上传(美图秀秀)

    最近需要开发一个头像上传的功能,找了很多都需要授权的,后来找到了美图秀秀,功能非常好用. <?php /** * Note:for octet-stream upload * 这个是流式上传PH ...

  4. ajax上传文件 基于jquery form表单上传文件

    <script src="/static/js/jquery.js"></script><script> $("#reg-btn&qu ...

  5. PHP 后台程序配置config文件,及form表单上传文件

    一,配置config文件 1获取config.php文件数组, 2获取form 表单提交的值 3保存更新config.php文件,代码如下: $color=$_POST['color']; $back ...

  6. .net c# 提交包含文件file 的form表单 获得文件的Stream流

    1.前台html代码 要写一个有id的form,可是不能有runat="server"属性.由于一个页面中,有这个属性的form表单仅仅能有一个. 再要有一个有name的ifram ...

  7. 文件的上传(1)(表单上传和ajax文件异步上传)

    文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...

  8. Linux 基础命令-CURL 表单上传文件

    CURL -F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user ...

  9. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

随机推荐

  1. hdu 1217 利用flord算法求 有环图 2点之间最大值

    Arbitrage                                                      T ime Limit: 2000/1000 MS (Java/Other ...

  2. Ubuntu 问题解决汇总

    汇总一些ubuntu相关的问题 1.Ubuntu支持安装多媒体播放插件(新系统安装后必备) ubuntu-restricted-extras package allows users to insta ...

  3. RH033读书笔记(17) - Summary

    End of Unit 1 • Questions and Answers • Summary • Open source and the right to modify • The GNU Proj ...

  4. ASA基本配置

    拓扑如下: ASA5520# show running-config : Saved:ASA Version 8.0(2) !hostname ASA5520enable password 2KFQn ...

  5. UVA 639 (13.08.25)

     Don't Get Rooked  In chess, the rook is a piece that can move any number of squaresvertically or ho ...

  6. 点滴的积累---J2SE学习小结

    点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...

  7. [置顶] Firefox OS 学习——manifest.webapp结构分析

    在Firefox OS 学习——Gaia 编译分析  这篇文章多次提到manifest.webapp文件,对于做过android app 开发的人来说,都很熟悉Android.mk 和Manifest ...

  8. python实现了字符串的按位异或和php中的strpad函数

    近期在写自己主动化測试,因为开发加密中用到strpad和字符串的按位异或,而python中没有这种函数和功能,所以必须自己写一套,要不自己主动化測试无法进行,所以就用python实现了一下,因为在写字 ...

  9. Netflix公司监控内部安全的开源项目

    Netfix公司已经公布了三个内部工具,用于捕捉黑客在使用互联网服务时留下的痕迹. AndyHoernecke和Netflix公司的云安全团队成员ScottBehrens指出:"很多安全团队 ...

  10. 编程算法 - 字典分词 代码(C)

    字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...