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

这个不刷新的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",如图:

时间: 2024-12-23 03:26:52

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

【Jsp】使用jspsmartupload完成简单的文件上传系统

请不要妄想,一个html的file控件,再加上javascript与jquery语句就可以完成文件上传, 文件上传系统从来是需要配合服务器来完成的 用户把自己的文件上传到服务器上 文件上传系统是很复杂的一件事. html的file控件向动态网页语言以post方式通过enctype="multipart/form-data"解码成二进制文件就不管了 动态网页需要对其通过asp,jsp,php,asp.net编程,才能正常把文件保存到服务器中 网络上对文件处理的方法是五花八门,让人无从下手

无刷新的的文件上传

一. 通过iframe来实现无刷新的的文件上传,其实是有刷新的,只是在iframe里面隐藏了而已 简单的原理说明: <form id="form1" method="post" action="upload.do" enctype="multipart/form-data"  target="uploadframe" > <input type="file" id=&q

jsp开发无刷新文件上传程序代码

原文:jsp开发无刷新文件上传程序代码 源代码下载地址:http://www.zuidaima.com/share/1550463484660736.htm 无刷新文件上传程序代码 源代码截图

【JSP】文件上传局部刷新

看到局部刷新,大家联想到的肯定是Ajax,但实际上,Ajax是没有办法实现文件上传的局部刷新的.由于安全性的需要,JavaScript代码是不能访问客户端文件系统,所以通过XMLHttpRequest的请求参数是无法得到上传文件的内容的,只能得到文件名. 那么我们又是怎样实现文件上传局部刷新的呢?其实我们再上传文件的时候采用的还是同步方式,为了不刷新整个页面,我们需要用到隐藏的iframe,我们在页面上增加一个隐藏的<iframe>元素,该元素将会作为提交表单的target. 文件上传要求表单

用jspSmartUpload组件实现文件上传、下载

jspSmartUpload组件,可从http://download.csdn.net/user/dearchuansir下载,压缩包的名字是jspSmartUpload.zip.下载后,将其解压到Tomcat的webapps目录下.解压后,将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF,这样一改jspSmartUpload类才能使用.如果想让Tomcat服务器的所有Web应用程序都能用它,必须做如下工作: 1.进入命令行状态,将目录切换

JSP文件上传下载组件(1)

使用jspSmartUpload可以实现文件上传和下载 jspSmartUpload组件主要有4个类:File类,Files类,Request类和SmartUpload类 *SmartUpload类的initialize方法:这个方法是上传和下载共用的方法,他的作用是执行上传和下载的初始化工作,必须第一个执行.原型有多个,主要使用下面这个: public final void initialize(javax.serlvet.jsp.PageContext pageContext) 其中,pag

基于jsp的AJAX多文件上传的实现

最近的项目开发中,遇到了一个多文件上传的问题,即在不刷新页面的情况下,上传多个文件至服务器.现总结分享如下: 本文主要采用了基于jsp的ajax,jquery,servlet等技术. 1.upload.jsp 点击上传时,调用对应的fileupload函数,通过ajax将文件异步传送到servlet中处理.注意在文件上载时,所使用的编码类型应当是"multipart/form-data",它既可以发送文本数据,也支持二进制数据上载. <%@ page language="

Java jsp servlet 实现文件上传 最简单操作

|--实现文件上传的方式 1.进入http://commons.apache.org/proper/commons-fileupload/using.html 2.点击用户指南 3.对着用户指南一步步复制粘贴,并把代码撸成自己想要的样子 补充:记得要将commons-io-2.4.jar和commons-fileupload-1.2.2.jar这两个包放到编译器里面 |--现成的代码 1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator

Asp.Net 无刷新文件上传并显示进度条的实现方法及思路

相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认"拿来主义",只是我个人更喜欢凡是求个所以然.本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助. 效果图: 本文涉及到的知识点:1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序(IHttpHandler)和