`
cyz001
  • 浏览: 43912 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

假AJAX上传文件

    博客分类:
  • js
阅读更多
首先要说的就是 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上传。
分享到:
评论

相关推荐

    net上传大文件显示进度条

    4. **Progress事件**:在使用AJAX上传文件时,可以监听`progress`事件来获取上传进度信息。每次数据传输时,事件都会触发,从而更新进度条的值。 5. **Promise或async/await**:在现代JavaScript中,可以使用...

    uploadify实现多文件上传代码

    Uploadify通过在页面上创建一个假的文件输入框,用户点击后可以选择多个文件,然后通过Ajax方式将文件分批次上传到服务器。这种方式不仅减少了页面刷新,而且可以显示上传进度,提供了良好的交互性。 配置Uploadify...

    JS 模拟上传进度条.

    此外,为了更好的用户体验,可以使用AJAX异步上传,配合加载指示器,避免页面刷新。 总结来说,“JS 模拟上传进度条”涉及到HTML5的文件API、XMLHttpRequest对象和进度事件的使用。通过监听和处理这些技术,开发者...

    jqurey 分页插件

    5. **处理数据**:在回调函数中,根据`page`参数发送AJAX请求获取指定页的数据,然后更新页面内容。 以上是关于"jQuery分页插件"的基本使用和工作原理。这个"超级简单的jQuery分页插件"应该提供了足够的灵活性,以...

    批量上传图片到数据库

    Uploadify允许用户通过异步方式批量上传文件,提供了丰富的自定义选项和事件处理机制,使得文件上传体验更加友好。 Uploadify的工作原理是利用HTML5的File API或Flash技术(对于不支持HTML5的浏览器),创建一个假...

    AjaxFileUpload:使用jQuery上传文件

    使用jQuery上传文件 此插件使用 FileAPI ( ) 来获取所选文件。 它不使用动态创建 iframe 的传统方式,而是使用 FormData 对象( )。 步骤1 进行 AJAX 调用以上传文件。 创建一个 FormData 对象。 然后将文件...

    详解nodejs实现本地上传图片并预览功能(express4.0+)

    文章中还提到了一些技术细节,例如文件类型检查、AJAX请求的`async`和`cache`属性,以及如何处理和返回上传结果。同时,通过`console.log`和`alert`等前端调试技术,确保上传过程中关键步骤能够正确执行,帮助开发...

    前端学生作业毕设实训素材-生产设备防盗报警类网站模板(带手机端).rar

    7. **上传管理**: `uploads`可能涉及用户上传的文件管理,比如用户上传的照片或文档。学生需要学习如何处理文件上传,包括验证、存储和展示。 8. **插件/组件**: `plus`可能包含了一些自定义的前端组件或者第三方...

    计算机毕业论文-基于Javaweb的学生考勤系统.doc

    系统支持上传学生的个人信息、照片等文件,同时提供下载功能,方便数据的备份和查看。 5.3.2 数据的导入和导出 为提高数据录入效率,系统允许用户批量导入考勤数据,同时提供数据导出功能,便于数据分析和报告制作...

    X-Blog V1.0 正式版

    将文件夹中的文件及文件夹全部上传到你的空间; 2.然后运行根目录下的Setup.asp进行安装; 3.为了网站安全,推荐修改后台管理目录,最好改为只有自己知道 注:此次更新未涉及到数据库,升级的朋友请直接保留...

    asoft签到管理系统tykq3.5_build20110125

    ajaxinc: AJAX应用类(以ajax_命名的四个文件)、附件上传(upload_5xsoft.inc|asoft_upload.asp)和EXCEL导出文件(toexcel.asp)、顶部banner(top.asp)、验证码生成文件(CodeGen.asp、VerifyCode.asp),数据库连接...

    Web.asp程序设计课后习题答案(沈士根版).pdf

    这是因为 FrontPage 扩展提供了一种简单的方法来管理远程站点的内容,包括文件上传、下载以及协作编辑等功能。 - **(3)发布网站后不可能存在的文件夹:** - B选项 App_Code 文件夹。App_Code 文件夹用于存储...

    bezkred:bezkred-blog

    6. 示例内容文件:可能包含一些预填充的文章、评论或假数据,以便用户了解模板的实际效果。 在使用这个模板创建博客时,你需要根据自己的需求修改 HTML 文件中的文本内容,调整 CSS 样式以符合个人品牌,以及可能地...

    FakeWebsiteUpload

    在互联网世界中,"FakeWebsiteUpload"可能指的是伪造的网站上传或恶意网站的创建,这类行为通常用于欺骗用户,窃取个人信息,或者传播恶意软件。攻击者通过创建与合法网站高度相似的假网站,诱导用户访问并输入敏感...

    21春北京理工大学《脚本程序设计》在线作业参考答案.docx

    20. **fileUpload对象**:fileUpload对象确实代表HTML表单中的文件上传输入元素,包含一个文本框。 21. **CSS滤镜**:GLOW滤镜用于产生发光效果,RevealTrans滤镜是动画过渡效果。 22. **删除Cookie**:删除Cookie...

    里面是关于小程序的,类似于一个点餐系统

    6. **接口文件与数据处理**:接口文件通常用于后台与前端通信,提供数据服务。学生需要学习如何使用Ajax进行网络编程,处理从后台获取的数据,例如菜品信息、用户订单等,以及JSON格式的数据转换。 7. **微信小程序...

    免费简历模板参考JavaEE-小鱼7号.docx

    他还具备在线支付、邮件发送、短信发送、文件上传下载等功能的实现能力。 【求职意向】明确表示求职者希望成为一名Java工程师,期望工作地点在广州,薪资面议。 【工作经验】部分列举了两个具体的项目经历。第一个...

    Struts_2_标签库(文档手册)_Tags-API-CLSW-JSP

    用于文件上传,可以设置多种属性如name、id等,以便于文件数据的正确提交。 #### `&lt;s:form&gt;` 标签 封装了整个表单的提交逻辑,支持GET和POST方法,以及数据绑定和表单验证。 #### `&lt;s:generator&gt;` 标签 用于生成...

    struts2.0 标签清单

    `&lt;s:file&gt;` 标签用于创建文件上传控件,处理文件上传操作。 ### 16. `&lt;s:form&gt;` 标签 `&lt;s:form&gt;` 标签用于创建表单,可以指定Action、Method等属性,是Struts2中最常用的标签之一。 ```xml &lt;!-- 表单内容 --&gt; ...

Global site tag (gtag.js) - Google Analytics