Ajax方式提交带文件上传的表单及隐藏iframe应用_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上传

时间: 2016-01-25

Ajax方式提交带文件上传的表单及隐藏iframe应用_AJAX相关的相关文章

Ajax方式提交带文件上传的表单及隐藏iframe应用

一般的表单都是通过ajax方式提交,所以碰到带文件上传的表单就比较麻烦.基本原理就是在页面增加一个隐藏iframe,然后通过ajax提交除文件之外的表单数据,在表单数据提交成功之后的回调函数中,通过form单独提交文件,而这个提交文件的form的target就指向前述隐藏的iframe. html 代码 复制代码 代码如下: <html> <body> <form action="upload.jsp" id="form1" name=

模拟提交有文件上传的表单(通过http模拟上传文件)

通过HTTP模拟GET或POST请求,提交数据到服务端获取响应,比较常见些:但如上传文件到服务端,使用html form当然简单了,而因环境所限有时需要使用模拟方法去提交有附件(文件上传)的表单.我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端.   下面是一个简单的html form,两个文本输入框,一个文件上传(这里我选择一张图片),注意有文件上传的form的enctype属性. html form 1 <form action="s

asp.net 模拟提交有文件上传的表单(通过http模拟上传文件)_实用技巧

我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端. 下面是一个简单的html form,两个文本输入框,一个文件上传(这里我选择一张图片),注意有文件上传的form的enctype属性. 复制代码 代码如下: <form action="sql.aspx" method="post" enctype="multipart/form-data"> <input id="

MVC中基于Ajax和HTML5实现文件上传功能_AJAX相关

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功能 高级功能:通过拖拽文件的操作实现多个文件上传功能 背景 HTML5提供了一种标准的访问本地文件的方法--File API规格说明,通过调用File API 能够访问文件信息,也可以利用客户端来验证上传文件的类型和大小是否规范. 该规格说明包含以下几个接口来使用文件: File接口:具有文件的"读

MVC中基于Ajax和HTML5实现文件上传功能

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功能 高级功能:通过拖拽文件的操作实现多个文件上传功能 背景 HTML5提供了一种标准的访问本地文件的方法--File API规格说明,通过调用File API 能够访问文件信息,也可以利用客户端来验证上传文件的类型和大小是否规范. 该规格说明包含以下几个接口来使用文件: File接口:具有文件的"读

ajax+php 无刷新文件上传代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.111cn.net/1999/xhtml"> <head> <meta http-equiv="conte

美图秀秀web开放平台--PHP流式上传和表单上传示例分享_php实例

废话少说,直接上代码: <?php /** * Note:for octet-stream upload * 这个是流式上传PHP文件 * Please be amended accordingly based on the actual situation */ $post_input = 'php://input'; $save_path = dirname(__FILE__); $postdata = file_get_contents($post_input); if (isset($p

代码-AFNetworking 怎样上传数据? 怎样上传模拟表单

问题描述 AFNetworking 怎样上传数据? 怎样上传模拟表单 AFNetworking 怎样上传数据? 怎样上传模拟表单? 求大神代码提示 解决方案 和取数据差不多的 首先定义一个字典,用来存放参数 NSDictionary* params = [NSDictionary dictionary]; params[@"属性"] = 值; 上传字段数据: ** //创建请求管理类 AFHTTPRequestOperationManager* mgr = [AFHTTPRequest

前端-jersey框架下上传form表单出错

问题描述 jersey框架下上传form表单出错 前端form <form id="picForm" action="/intelligentStage-system-manage/rest/admin/addimage" method="post" enctype="multipart/form-data"> <label style="margin-top: 30px;">用户名