`
qmug
  • 浏览: 201482 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多个文件上传的功能

    博客分类:
  • J2EE
阅读更多
这里用到的是用commons-fileupload-1.2.1.jar和commons-io-1.4.jar两个插件进行多个文件上传的功能。把这2个插件放入到lib下面

1. 在D盘下面建立temp文件夹,作为存放你所上传的文件的目录。
2. 建立个demo2.html
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>File upload</title>
</head>
<body>
    <form name="myform" action="demo2.jsp" method="post"
       enctype="multipart/form-data">
       File1:<br>
       <input type="file" name="myfile"><br>
       File2:<br>
       <input type="file" name="myfile"><br>
       <br>
       <input type="submit" name="submit" value="Commit">
    </form>
</body>
</html>

3. 建立demo2.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
	pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
	String uploadPath = "D:\\temp";
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	if (isMultipart == true) {
		try {
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			List<FileItem> items = upload.parseRequest(request);//得到所有的文件
			Iterator<FileItem> itr = items.iterator();
			while (itr.hasNext()) {//依次处理每个文件
		FileItem item = (FileItem) itr.next();
		String fileName = item.getName();//获得文件名,包括路径
		if (fileName != null) {
			File fullFile = new File(item.getName());
			File savedFile = new File(uploadPath, fullFile
			.getName());
			item.write(savedFile);
		}
			}
			out.print("upload succeed");
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else {
		out.println("the enctype must be multipart/form-data");
	}
%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
		<title>File upload</title>
	</head>
	<body>
	</body>
</html>


4.建立个servlet
package com.zj.sample;
 
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
@SuppressWarnings("serial")
public class Upload extends HttpServlet {
    private String uploadPath = "D:\\temp"; // 上传文件的目录
    private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录
    File tempPathFile;
 
    @SuppressWarnings("unchecked")
    public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws IOException, ServletException {
       
    	String msg = "";
		DiskFileUpload fu = new DiskFileUpload();
		// 设置允许用户上传文件大小,单位:字节
		// fu.setSizeMax(10000000);
		// 设置最多只允许在内存中存储的数据,单位:字节
		// fu.setSizeThreshold(4096);
		// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
		//(临时存放目录,文件上传完毕后有办法清除它吗?)
		fu.setRepositoryPath("D:\\TEMP");
		//开始读取上传信息
		List fileItems = null;
		try {
			fileItems = fu.parseRequest(request);
		} catch (FileUploadException e1) {
			// TODO 自动生成 catch 块
			e1.printStackTrace();
		}
		// 依次处理每个上传的文件
		Iterator iter = fileItems.iterator();
		while (iter.hasNext())
		{
			FileItem item = (FileItem) iter.next();
			//忽略其他不是文件域的所有表单信息
			if (!item.isFormField())
			{
				String name = item.getName();//获取上传的文件名
				long size = item.getSize();//获取上传的文件大小(字节为单位)
				if ((name == null || name.equals("")) && size == 0)
			    continue;//跳到while检查条件
				
				System.out.println("<tr>");
				System.out.println("<td>" + name + "</td>");
				System.out.println("<td>" + size + "</td>");
				
				//以下为文件名处理,将上传的文件保存在项目所在目录下。
				//获取文件名字符串的长度
				int end = name.length();
				//返回在此字符串中最右边出现的指定子字符串的索引。
				int begin = name.lastIndexOf("\\");
				File savedFile = new File("c:\\TEMP", name.substring(
				begin + 1, end));
				try {
					item.write(savedFile);
				} catch (Exception e) {
					// TODO 自动生成 catch 块
					e.printStackTrace();
				}
			}
		}
    	
    	
    	try {
           // Create a factory for disk-based file items
           DiskFileItemFactory factory = new DiskFileItemFactory();
 
           // Set factory constraints
           factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
           factory.setRepository(tempPathFile);// 设置缓冲区目录
 
           // Create a new file upload handler
           ServletFileUpload upload = new ServletFileUpload(factory);
 
           // Set overall request size constraint
           upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
 
           List<FileItem> items = upload.parseRequest(request);// 得到所有的文件
           Iterator<FileItem> i = items.iterator();
           while (i.hasNext()) {
              FileItem fi = (FileItem) i.next();
              String fileName = fi.getName();
              if (fileName != null) {
                  File fullFile = new File(fi.getName());
                  File savedFile = new File(uploadPath, fullFile.getName());
                  fi.write(savedFile);
              }
           }
           System.out.print("upload succeed");
       } catch (Exception e) {
           // 可以跳转出错页面
           e.printStackTrace();
       }
    }
 
    public void init() throws ServletException {
       File uploadFile = new File(uploadPath);
       if (!uploadFile.exists()) {
           uploadFile.mkdirs();
       }
       File tempPathFile = new File(tempPath);
        if (!tempPathFile.exists()) {
           tempPathFile.mkdirs();
       }
    }
}

5
1
分享到:
评论
1 楼 qiankai86 2012-04-14  
s

相关推荐

    js input file多个文件上传功能.zip

    这个"js input file多个文件上传功能.zip"包含了一个实现这一功能的代码示例,适用于图片和其他类型的文件上传。在网页上,用户可以通过点击一个文件输入框选择多个文件进行上传,极大地提高了用户体验。 首先,让...

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    多文件上传和展示

    多文件上传功能则意味着用户可以一次性选择并上传多个文件,大大提高了数据传输的效率。 【详细实现】 1. **引入资源**:首先,你需要在HTML文件中引入Bootstrap和Bootstrap-fileinput的相关CSS和JS文件。这些文件...

    java多文件上传实现

    在Java开发中,多文件上传是一项常见的功能,尤其在Web应用中,用户可能需要一次性上传多个文件,如图片、文档等。本知识点将详细介绍如何在Java中实现这一功能,以及结合Flash实现上传界面并显示上传进度条。 1. *...

    JSP多个文件上传源代码程序

    【标题】"JSP多个文件上传源代码程序"揭示了一个重要的Web开发技术,即在JavaServer Pages (JSP)环境中实现多文件上传的功能。在Web应用中,用户可能需要同时上传多个文件,如图片、文档等,这在论坛、博客、社交...

    上传多个文件

    在IT领域,上传多个文件是一项常见的操作,尤其在网页或应用程序中。这一功能使得用户能够一次性上传多...在实际开发中,根据项目需求和用户体验,可以灵活运用和扩展这些基础技术,提供更加便捷、安全的文件上传功能。

    多文件上传 源码

    综上所述,这个"多文件上传 源码"涵盖了文件选择、读取、包装、异步上传、进度追踪、暂停/取消、错误处理等多个环节,是构建高效、用户友好的文件上传功能的重要参考资料。对于开发者来说,理解并掌握这些技术细节,...

    多个文件上传

    总的来说,实现多个文件上传的功能需要对Java Servlet、文件I/O、异常处理和安全策略有深入理解。在实际开发中,可以根据项目需求选择合适的工具和库,如Spring Boot中的`MultipartFile`,或是Apache Commons ...

    android 文件上传(多个或单个),图片上传

    如果需要上传多个文件,先将所有文件的URI保存在一个列表中。遍历此列表,依次处理每个文件。 #### 3.2 Multipart请求 多文件上传通常采用Multipart形式,如HTTP的POST请求。Android的`HttpURLConnection`或第三方...

    C# .NET FileUpload 多文件上传例子

    同时,了解并应用相关的WebAPI或SignalR技术,可以使你的文件上传功能更加先进和高效。 总的来说,C# .NET的多文件上传涉及前端和后端的协同工作,通过理解并实践这些示例,你可以更好地掌握文件上传这一重要技能,...

    基于SpringBoot的文件上传系统,前后端分离,单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传

    采用前后端分离的方式进行开发,实现了几种常用的文件上传功能。 前端采用 vue.js + plupload + element-ui 实现了文件在浏览器端的发送, 后端采用 spring boot + spring + spring mvc + mybatis 实现了文件在服务器...

    一次选择多个文件进行批量上传

    传统的HTML表单上传方式通常只能处理单个文件,但随着技术的发展,现在我们可以使用Ajax多文件上传组件来实现一次选择并上传多个文件的功能。这种组件不仅提高了用户体验,还允许在不刷新页面的情况下完成文件上传,...

    PHP多文件上传类,支持单个和多个文件上传

    5. **多文件上传支持**:类能够处理表单中包含多个`&lt;input type="file"&gt;`元素的情况,一次性上传多个文件,大大提高了用户体验。 6. **详细注释**:类的代码中包含了丰富的注释,方便开发者理解每一步操作的逻辑,...

    EXTJS 多文件上传

    EXTJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用程序。在EXTJS中,`MultiFileUploadField` 是一个组件,它允许用户在单个操作中...通过合理利用这个组件,开发者可以快速构建出功能完善的文件上传功能。

    JSP同时选择多文件上传MultifileUploadDemo

    "MultifileUploadDemo"是一个很好的学习资源,它展示了如何结合Flash和JSP实现多文件上传功能。通过深入研究这个示例,开发者可以掌握如何处理复杂的文件上传需求,提高Web应用的功能性和用户体验。同时,随着HTML5...

    JavaScript上传多个文件

    综上所述,这个名为“js控制多文件上传”的压缩包可能包含了实现上述功能的JavaScript代码,可以帮助开发者快速集成多文件上传功能到他们的网页应用中。使用这个资源,开发者可以避免从零开始编写复杂的文件上传逻辑...

    Vuejs文件上传组件多文件上传

    在Vue.js中,实现文件上传功能是常见的需求,尤其是在构建交互丰富的Web应用时。本篇将详细介绍Vue.js中实现多文件上传的相关知识点,以及如何使用`vue-upload-component`这个开源组件来帮助我们实现这一功能。 ...

    uploadify支持一次选择多个文件且批量上传

    "uploadify"是一款基于jQuery的插件,它为网页提供了强大的文件上传功能,包括一次选择多个文件和批量上传的能力。这些特性极大地提高了用户上传文件的效率,减轻了他们的操作负担。 "uploadify"的多选功能允许用户...

    多文件上传组件_Flash+ASP实现多文件上传功能

    通过实例化FileReference对象,用户可以选择本地计算机上的一个或多个文件,并通过HTTP请求将这些文件上传到服务器。FileReference类提供了选择文件(browse())、监控上传进度(addEventListener())以及实际上传...

Global site tag (gtag.js) - Google Analytics