首先要说的就是 ajax 是无法实现上传文件的,可以想一下ajax与后台通信都是通过传递字符串,怎么能传递文件呢?其实出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是不可能的。
而本文实现的文件上传也是无页面刷新的,可以说是一种"类似AJAX"方法。
开始之前先说两句无关的,其实在ajax出现之前,web应用也可以是无刷新的,那时大多通过IFrame来做到这一点。当然Ajax出现之后,人们一窝蜂地投奔Ajax 的阵营了,iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。ps:Ajax技术基本上可以说是由google公司带起来的,但少Gmail中上传文件用的还是 IFrame,所以说使用IFrame来上传文件是最好的选择。
我在这里这里用的技术是jsp,其实asp,php等也是一样可以这么实现的
一共两个文件就可实现:index.html 和 upload.jsp,在这里讲解一下,文后会附上源码
--index.html
html 代码
<html>
<body>
<form action="upload.jsp" id="form1" name="form1" encType="multipart/form-data" method="post" target="hidden_frame" >
<input type="file" id="file" name="file" style="width:450">
<INPUT type="submit" value="上传文件"><span id="msg"></span>
<br>
<font color="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传</font>
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>
</body>
</html>
<script type="text/javascript">
function callback(msg)
{
document.getElementById("file").outerHTML = document.getElementById("file").outerHTML;
document.getElementById("msg").innerHTML = "<font color=red>"+msg+"</font>";
}
</script>
index.html 中主要要做的就是写一个 form 和 iframe ,并把 form 的 target 设为 iframe 的名字,注意要把 iframe 设为不可见,其他的都是正常的文件上传的写法,这样刷新的页面就是这个隐藏的 Iframe ,而在 index.html 中是不会有页面刷新的,js的 callback 方法是回调方法。用于清空文件上传框和显示后台信息,注意清空文件上传框的方法,和普通方法有点不一样。
--upload.jsp
jsp 代码
<%@ page language="java" contentType="text/html; charset=gb2312" %>
<%@ page import="com.jspsmart.upload.SmartUpload"%>
<%
//新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
//上传初始化
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 file success')</script>");
}else
{
out.println("<script>parent.callback('upload file error')</script>");
}
%>
upload.jsp 中只要注意最后输出的格式就可以了。其实原理就是输出一段js代码到 iframe 中,然后在iframe中来控制它的父页面。
OK,至此一个无刷新的页面上传组件就做好了,不要忘了在 WEB-INF/lib 下加上必须的 jspSmartUpload.jar 包。
需要说明的是使用Iframe来上传,状态栏还是会有刷新的,因为iframe 中的页面刷新了嘛,但是外部页面,就是你所看到的页面是没有刷新的,所以也可以说是类似Ajax上传。
分享到:
相关推荐
4. **Progress事件**:在使用AJAX上传文件时,可以监听`progress`事件来获取上传进度信息。每次数据传输时,事件都会触发,从而更新进度条的值。 5. **Promise或async/await**:在现代JavaScript中,可以使用...
Uploadify通过在页面上创建一个假的文件输入框,用户点击后可以选择多个文件,然后通过Ajax方式将文件分批次上传到服务器。这种方式不仅减少了页面刷新,而且可以显示上传进度,提供了良好的交互性。 配置Uploadify...
此外,为了更好的用户体验,可以使用AJAX异步上传,配合加载指示器,避免页面刷新。 总结来说,“JS 模拟上传进度条”涉及到HTML5的文件API、XMLHttpRequest对象和进度事件的使用。通过监听和处理这些技术,开发者...
5. **处理数据**:在回调函数中,根据`page`参数发送AJAX请求获取指定页的数据,然后更新页面内容。 以上是关于"jQuery分页插件"的基本使用和工作原理。这个"超级简单的jQuery分页插件"应该提供了足够的灵活性,以...
Uploadify允许用户通过异步方式批量上传文件,提供了丰富的自定义选项和事件处理机制,使得文件上传体验更加友好。 Uploadify的工作原理是利用HTML5的File API或Flash技术(对于不支持HTML5的浏览器),创建一个假...
使用jQuery上传文件 此插件使用 FileAPI ( ) 来获取所选文件。 它不使用动态创建 iframe 的传统方式,而是使用 FormData 对象( )。 步骤1 进行 AJAX 调用以上传文件。 创建一个 FormData 对象。 然后将文件...
文章中还提到了一些技术细节,例如文件类型检查、AJAX请求的`async`和`cache`属性,以及如何处理和返回上传结果。同时,通过`console.log`和`alert`等前端调试技术,确保上传过程中关键步骤能够正确执行,帮助开发...
7. **上传管理**: `uploads`可能涉及用户上传的文件管理,比如用户上传的照片或文档。学生需要学习如何处理文件上传,包括验证、存储和展示。 8. **插件/组件**: `plus`可能包含了一些自定义的前端组件或者第三方...
系统支持上传学生的个人信息、照片等文件,同时提供下载功能,方便数据的备份和查看。 5.3.2 数据的导入和导出 为提高数据录入效率,系统允许用户批量导入考勤数据,同时提供数据导出功能,便于数据分析和报告制作...
将文件夹中的文件及文件夹全部上传到你的空间; 2.然后运行根目录下的Setup.asp进行安装; 3.为了网站安全,推荐修改后台管理目录,最好改为只有自己知道 注:此次更新未涉及到数据库,升级的朋友请直接保留...
ajaxinc: AJAX应用类(以ajax_命名的四个文件)、附件上传(upload_5xsoft.inc|asoft_upload.asp)和EXCEL导出文件(toexcel.asp)、顶部banner(top.asp)、验证码生成文件(CodeGen.asp、VerifyCode.asp),数据库连接...
这是因为 FrontPage 扩展提供了一种简单的方法来管理远程站点的内容,包括文件上传、下载以及协作编辑等功能。 - **(3)发布网站后不可能存在的文件夹:** - B选项 App_Code 文件夹。App_Code 文件夹用于存储...
6. 示例内容文件:可能包含一些预填充的文章、评论或假数据,以便用户了解模板的实际效果。 在使用这个模板创建博客时,你需要根据自己的需求修改 HTML 文件中的文本内容,调整 CSS 样式以符合个人品牌,以及可能地...
在互联网世界中,"FakeWebsiteUpload"可能指的是伪造的网站上传或恶意网站的创建,这类行为通常用于欺骗用户,窃取个人信息,或者传播恶意软件。攻击者通过创建与合法网站高度相似的假网站,诱导用户访问并输入敏感...
20. **fileUpload对象**:fileUpload对象确实代表HTML表单中的文件上传输入元素,包含一个文本框。 21. **CSS滤镜**:GLOW滤镜用于产生发光效果,RevealTrans滤镜是动画过渡效果。 22. **删除Cookie**:删除Cookie...
6. **接口文件与数据处理**:接口文件通常用于后台与前端通信,提供数据服务。学生需要学习如何使用Ajax进行网络编程,处理从后台获取的数据,例如菜品信息、用户订单等,以及JSON格式的数据转换。 7. **微信小程序...
他还具备在线支付、邮件发送、短信发送、文件上传下载等功能的实现能力。 【求职意向】明确表示求职者希望成为一名Java工程师,期望工作地点在广州,薪资面议。 【工作经验】部分列举了两个具体的项目经历。第一个...
用于文件上传,可以设置多种属性如name、id等,以便于文件数据的正确提交。 #### `<s:form>` 标签 封装了整个表单的提交逻辑,支持GET和POST方法,以及数据绑定和表单验证。 #### `<s:generator>` 标签 用于生成...
`<s:file>` 标签用于创建文件上传控件,处理文件上传操作。 ### 16. `<s:form>` 标签 `<s:form>` 标签用于创建表单,可以指定Action、Method等属性,是Struts2中最常用的标签之一。 ```xml <!-- 表单内容 --> ...