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. VC++ 视频播放器 图文步骤记录

    1.安装DirectShow9.0 SDK DirectShow9 SDK下载链接http://download.csdn.net/detail/jindou910101/5591169 2.运行Di ...

  2. Installing SSL on CentOS | My Virtual Time Capsule

    Installing SSL on CentOS | My Virtual Time Capsule Installing SSL on CentOS Extracted from the Sourc ...

  3. 使用U盘进行Linux系统的安装

    由于目前很多服务器已经本身不配光驱了,最近测试了下使用U盘进行Linux系统的安装,过程比较简单,需要注意的地方如下: 1.找一台linux主机,插入U盘,执行fdisk -l,识别到U盘. 2.将需 ...

  4. Keil - 编译错误总结 01

    Keil 编译 STM32project,出现下述错误. 并且.   Options for Target  -> Output   -  Browse  Information 选项无法勾选. ...

  5. C语言数组

    在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...

  6. Spring整合Jms学习(三)_MessageConverter介绍

    1.4     消息转换器MessageConverter MessageConverter的作用主要有双方面,一方面它能够把我们的非标准化Message对象转换成我们的目标Message对象,这主要 ...

  7. iOS得知1_初体验

    UIView:父类的所有控件,所有的UIView它是一个容器.可容纳其他UIView UIController:用于控制UIView,责创建/销毁自己的UIView,显示/隐藏UIView.处理UIV ...

  8. C++:抽象基类和纯虚函数的理解

    转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ...

  9. phantomjs,selenium,pyv8,pythonwebkit,,,,,,,,,,,,,

    Pyv8,PythonWebKit,Selenium,PhantomJS,Ghost.py 等等.... 快速构建实时抓取集群[searchtb] 定义:http://i.cnblogs.com/Ed ...

  10. UVA12304 2D Geometry 110 in 1! 计算几何

    计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...