【Jsp】使用AjaxFileUploader与jspsmartupload完成不刷新的Ajax文件上传系统

来源:互联网 发布:不是小偷就是程序员 编辑:程序博客网 时间:2024/06/09 20:50

这个不刷新的Ajax文件上传系统同样可以用来做预览图

虽然预览图完全可以通过不上传图片就完成,但是不刷新的Ajax文件上传系统可以做到上传完图片立即返回上传结果给用户的结果

上次在《【Jsp】使用jspsmartupload完成简单的文件上传系统》(点击打开链接)一文中完成了一个简单的文件上传系统

但是这个文件上传系统过于传统,

上传完文件之后需要跳转到另外一个页面中提交表单,处理表单,然后再提供一个“返回”按钮给用户

如果用户要求上传之后,马上看到图片,并且不跳转,只好利用Ajax技术来实现,

但是在《【Jsp】Jqueryajax技术在Jsp中的应用与javascript中的正则表达式》(点击打开链接)一文中介绍的Ajax技术只能传输普通的表单文本,

那么如果要求Jsp中的Ajax技术能够传输文件,那该怎么办呢?

这时候,要用到AjaxFileUploader控件来支持文件在Ajax的传输


一、基本目标

能够在一个网页中完成图片的上传,并显示上传的结果,如图:


图的左侧是我tomcat文件夹,图右侧则是我的网页。

如果上传的是非文件,那么则弹出对话框决绝



二、制作过程

1、首先要配置好jspsmartupload与AjaxFileUploader,jspsmartupload在《【Jsp】使用jspsmartupload完成简单的文件上传系统》(点击打开链接)一文中讲过来,其实就是一个jar包,不再赘述,AjaxFileUploader则可以到官网(点击打开链接)中下载,我也给加上传了一份(点击打开链接),然后在eclipse中新建一个工程,把jspsmartupload.jar放到...\WebRoot\WEB-INF\lib之中,AjaxFileUploader是一个压缩包,解压后到AjaxFileUploader如下:


把里面的ajaxfileupload.js与jquery.js复制到工程目录下,最好新建一个文件夹,如WebRoot\js,再与工程目录下新建一个pic文件夹用来存放上传图片,整个目录结构如下图:


其中index.jsp是系统自带的,被笔者涂黑的upload.jsp与本工程无关


2、uploadsuc.jsp

这个文件没什么好说的,原理与《【Jsp】使用jspsmartupload完成简单的文件上传系统》(点击打开链接)一文中的一样,下面是其代码:

<!-- 注意页首两个包是怎么引用的 --><%@ page language="java" import="java.util.*,com.jspsmart.upload.*"pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>上传处理页面</title></head><body><% //之所以要放到异常抛出结构里面,是为了避免直接访问此页报错 try{//指定动作 SmartUpload smart=new SmartUpload(); smart.initialize(pageContext); smart.upload(); //把文件保存到同目录的pic文件夹 smart.save("/pic/"); }catch(Exception e){%>出错!<%} %><a href="upload.jsp">返回</a></body></html>

3、Fileupload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><!-- 开头引入两个组件文件 --><script src="js/jquery.js"></script><script src="js/ajaxfileupload.js"></script></head><!-- body部分也是一个很简单的表单,注意action必须为空,方式为post,并且注意编码, --><!-- 里面有个file控件,一旦用户选择完文件之后,直接触发下面脚本的ajaxFileUpload()函数提交 --><body><form name="form" action="" method="POST" enctype="multipart/form-data"><input id="myUpload" type="file" name="myUpload" onchange="return ajaxFileUpload();"><!-- 这个id为pic的控件是用来显示上传图片的 --><img id="pic" src="" /></form></body></html><script type="text/javascript">function ajaxFileUpload(){//下面两行代码是先拿到id为myUpload的文件的文件名,注意文件名是这样取的,file控件的values值是一个伪路径,file控件+脚本从来就无法直接操作文件var filename=$("#myUpload").val();filename = filename.substring(filename.lastIndexOf("\\")+1);//下面是取得文件的后缀名,如果后缀名不是图片后缀名,那么则不运行ajax上传代码,之间到下面的else中弹窗exname = filename.substring(filename.lastIndexOf(".")+1);   if(exname.indexOf("png")!=-1||exname.indexOf("jpg")!=-1||exname.indexOf("gif")!=-1||exname.indexOf("bmp")!=-1||exname.indexOf("jpeg")!=-1){$.ajaxFileUpload({url:'uploadsuc.jsp',secureuri:false,//这里的结构与普通ajax是一样的,到uploadsuc.jsp中响应,注意下面的fileElementId就行,指明传递的文件是id为myUpload的东西fileElementId:'myUpload',dataType: 'text',success: function (data){//如果成功,那么则设置id为pic的图片的src,这样pic就能成功显示$("#pic").attr("src","./pic/"+filename);},error: function (data){alert("error");}})}else{alert("必须是图片!");}return false;}</script>

三、备注

至此,一个简单的ajax文件上传系统就完成了,部分tomcat可能不支持中文链接,导致图片上传之后无法成功显示,

此时,应该打开tomcat的目录,如apache-tomcat-6.0.43\conf\下的server.xml,用记事本打开,找到Connector port="8080" protocol="HTTP/1.1"那行,加上URIEncoding="UTF-8",如图:


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 奶油打出来很稀怎么办 寄的水果压坏了怎么办 吃了一个烂水果怎么办 孕期吃了烂水果怎么办 邮快递水果坏了怎么办 快递寄水果坏了怎么办 闲鱼买家拒收水果怎么办 洗澡桶里有很多老鼠屎怎么办? 塑料和金属断了怎么办 孕妇吃了沙拉酱怎么办 孕妇淀粉吃多了怎么办 怀孕初期吃了杏怎么办 如果睡觉吃梨了怎么办 怀孕6个月有点贫血怎么办 怀孕八个多月有点贫血怎么办 生完小孩身体虚怎么办 孩子咳嗽厉害怎么办吃什么药 新生儿三天不拉大便怎么办 胃吃的变大了怎么办 小孩长高长的慢怎么办 小孩长高长得慢怎么办 小孩吃东西不吸收营养怎么办 婴儿长得太快怎么办 2个月婴儿长太快怎么办 孩子脚长得太快怎么办 4个月宝宝缺钙怎么办 2个月宝宝不长肉怎么办 小孩子长得不高怎么办 宝宝误吃蜂蜜了怎么办 有人拿着吃完的东西退货怎么办 婴儿个子长的慢怎么办 儿童长得太快怎么办 宝宝个子长太快怎么办 孩子九个月奶水不够怎么办 小孩起热痱子痒怎么办 媳妇生完小孩奶水出不来怎么办 生完孩子下奶疼怎么办 生完小孩没奶水怎么办 孩子半个月奶水越来越少怎么办 半个月后奶水越来越少怎么办 坐月子半个月奶水越来越少怎么办