`

使用 commons-fileupload iframe 实现页面无刷新多文件上传

    博客分类:
  • java
阅读更多
使用了 commons-fileupload-1.2.2.jar 和 commons-io-2.0.1.jar 两个组件。

后台 UploadServlet.java:
package upload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@SuppressWarnings("rawtypes")
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("UTF-8");
        StringBuilder msg = new StringBuilder();
        final long maxSize = 1000 * 1024 * 1024;
        final String[] suffix = new String[] {"jpg", "jpeg", "gif", "txt", "doc","mp3", "wma", "m4a","rar","zip"};
        
        File tmpdir = new File("c:/tmpdir");
        if (!tmpdir.exists()) {
        	tmpdir.mkdirs();
        }
        File uploaddir = new File("c:/uploaddir");
        if (!uploaddir.exists()) {
        	uploaddir.mkdirs();
        }
        
        DiskFileItemFactory fac = new DiskFileItemFactory(1024*4, tmpdir);
        
        ServletFileUpload upload = new ServletFileUpload(fac);
        upload.setSizeMax(maxSize);

        List fileList = null;
        try {
			fileList = upload.parseRequest(request);
		} catch (FileUploadException e) {
			if (e instanceof SizeLimitExceededException) {
				out.println("<script>parent.callback('" + " 文件尺寸超过 " + maxSize + " 最大限制 " + "')</script>");
				return;
			}
			e.printStackTrace();
		}
	
		if (fileList.size() > 0) {
			 for (Iterator it = fileList.iterator(); it.hasNext();) {
				 String path = "";
				 String filename = null;
				 long size = 0;
				 String fileSuffix = null;
				 boolean has = false;
				 FileItem item = (FileItem) it.next();
				 if (item == null || item.isFormField()) {
					 continue;
				 }
				 
				 path = item.getName();
				 int temp = path.lastIndexOf("\\");
				 filename = temp != -1 ? path.substring(temp + 1) : path;
				 size = item.getSize();
				 if (!path.equals("") && size != 0) {
					 fileSuffix = path.substring(path.lastIndexOf(".") + 1);
					 
					 for (String s : suffix) {
						 if (s.equals(fileSuffix)) {
							 has = true;
							 break;
						 }
					 }
					 if (!has) {
						 msg.append(filename + " 上传文件格式不正确 ");
						 continue;
					 }
					try {
						item.write(new File(uploaddir + File.separator + filename));
						msg.append(filename + " 上传成功 ");
					} catch (Exception e) {
						msg.append(filename + " 上传失败 ");
						e.printStackTrace();
					}
				 }
			 }
		}
		out.println("<script>parent.callback('" + msg.toString() + "')</script>");
    }
}



jsp 文件上传页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<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>
  </head>
  
  <body>
    <form action="<%=path %>/UploadServlet" id="form1" name="form1" encType="multipart/form-data"  method="post" target="hidden_frame" >
		<input type="file" id="file" name="file" style="width:450"><br>
		<input type="file" id="file" name="file" style="width:450"><br>
		<input type="file" id="file" name="file" style="width:450"><br>
		<input type="file" id="file" name="file" style="width:450"><br>
		<input type="file" id="file" name="file" style="width:450"><br>
		<input type="file" id="file" name="file" style="width:450"><br>
		<INPUT type="submit" value="上传文件"><span id="msg"></span><br>
		<font color="red">支持"jpg", "jpeg", "gif", "txt", "doc","mp3", "wma", "m4a","rar","zip"文件的上传</font>              
		<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
	</form>
  </body>
</html>

2
4
分享到:
评论
1 楼 pinganhongguo 2011-07-26  
学习了,,。。!!!

相关推荐

    ajax iframe jsp 无刷新上传文件.zip

    可以使用Servlet或自定义Tag库处理文件,如Commons FileUpload库,用于解析多部分表单数据。 4. **JavaScript字符串函数**:在前端处理中,JavaScript的字符串函数非常关键,例如trim()去除空白,substring()截取...

    无刷新上传文件

    无刷新上传文件是一种提高用户体验的技术,它允许用户在不刷新整个网页的情况下进行文件上传,减少了等待时间和网络资源的消耗。这种技术广泛应用于各种Web应用程序,尤其是涉及到用户交互和大量数据交换的场景,如...

    struts2文件上传模板

    通过以上步骤,我们就可以实现一个基本的Struts2文件上传模板,它利用IFrame实现了页面无刷新的上传效果,提高了用户体验。然而,实际项目中可能还需要考虑更多细节,如日志记录、错误处理策略、文件存储优化以及...

    Ajax上传实现根据服务器端返回数据进行js处理的方法

    Ajax上传说白了还是使用form表单提交,在当前页面加一个iframe,将提交的内容跳转到iframe中,造成一种页面无刷新的错觉。 以前也做过上传,基本是是使用commons-fileupload组件,基本的步骤是使用servlet处理完上传...

    jsp+ajax实现无刷新上传文件的方法

    因此,无刷新上传文件成为一种流行的实现方式,而JSP和AJAX技术的结合使用可以很好地解决这个问题。 首先,我们要了解JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,当...

    jsp文件的上传和下载

    在提供的`uploadByIframe`示例中,很可能是通过IFrame来处理文件上传,以避免刷新整个页面,提供更好的用户体验。IFrame可以让文件上传操作在后台进行,而不会影响用户在页面上的其他活动。 总的来说,理解和掌握...

    一个AJAX上传例子,带进度条

    总结来说,这个示例展示了如何使用AJAX和特定的上传组件(如Apache Commons FileUpload)实现一个带进度条的文件上传功能。通过异步通信和实时进度反馈,提升了用户体验,同时也展示了现代Web开发中的一些关键技术。...

    uplaodifyDome

    1. **jQuery uploadify插件**:uploadify是一个流行的jQuery插件,它可以实现文件的拖放上传、进度条显示、多文件同时上传等功能。用户只需简单的HTML和JavaScript代码,就能实现复杂的文件上传界面和逻辑。它支持...

    jsp上传实现进度条

    使用`Commons FileUpload`库可以帮助处理多部分请求,它可以读取文件块并计算已上传的百分比。 4. **进度条更新**:每次上传一个文件块时,服务器可以返回当前的上传进度。客户端通过AJAX回调接收这个进度信息,...

    基于ajax实现文件上传并显示进度条

    【Ajax实现文件上传并显示进度条】是一种在不刷新整个页面的情况下进行文件上传,并实时更新上传进度的技术。这种技术能够提供更好的用户体验,因为用户可以看到文件上传的状态,而不仅仅是等待一个未知的加载过程。...

Global site tag (gtag.js) - Google Analytics