`

Java Web上传组件使用:Commons-fileupload

阅读更多

Apache的上传组件其它已经被封装到Struts那中去了,我在网上找到了一些文章介绍它是如何上传文件的,自己跟了一下源码也写了一个上传的实例,仅供参考!

一、JSP页面如下:

<form method="POST" action="UploadServlet"
			ENCTYPE="multipart/form-data">
			<table>
				<tr><td><input type="text" name="subject" /></td></tr>
				<tr><td><input type="text" name="subject" /></td></tr>
				<tr><td><input type="file" name="file1" /></td></tr>
				<tr><td><input type="file" name="file2" /></td></tr>
				<tr><td><input type="file" name="file3" /></td></tr>
				<tr><td><input type="submit" value="上传"/></td></tr>
			</table>
		</form>
		<br />
		<a href="DownLoadServlet">下载</a>

二、上传的Servlet如下:

/**
 * Apache组件上传
 * 
 * @author mingxue.zhang@163.com
 * @date 2010-10-30
 */
public class UploadServlet extends HttpServlet {

	private static final long serialVersionUID = 5827821285414610443L;

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 上传文件目录
		String uploadDir = this.getServletContext().getRealPath("/uploadDir");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 设置内存区块大小4KB
		factory.setSizeThreshold(4 * 1024);
		// 设置暂存容器,当上传文件大于设置的内存块大小时,用暂存容器做中转
		factory.setRepository(new File(this.getServletContext().getRealPath(
				"/temp")));
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		fileUpload.setSizeMax(1024 * 1024 * 100);
		fileUpload.setFileSizeMax(1024 * 1024 * 10);
		List<FileItem> fileItemList = null;

		try {
			fileItemList = fileUpload.parseRequest(request);
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
		Iterator<FileItem> fileItemIterator = fileItemList.iterator();
		FileItem fileItem = null;
		while (fileItemIterator.hasNext()) {
			fileItem = fileItemIterator.next();
			// 普通文件框上传
			if (fileItem.isFormField()) {
				String filedName = fileItem.getFieldName();
				String filedValue = fileItem.getString("GBK");// 编码格式
				System.out.println(filedName);// 文件框名称
				System.out.println(filedValue);// 文件的值
			} else {
				String filedName = fileItem.getFieldName();// 文件上传框的名称
				// 获取文件上传的文件名
				String OriginalFileName = takeOutFileName(fileItem.getName());
				System.out.println("原始文件名:"+OriginalFileName);
				if (!"".equals(OriginalFileName)) {
					// 根据上传的文件名重新命名
					String newFileName = getNewFileName(OriginalFileName);
					System.out.println("重新名:"+newFileName);
					File writeToFile = new File(uploadDir + File.separator
							+ newFileName);
					try {
						fileItem.write(writeToFile);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	private String takeOutFileName(String filePath) {
		String fileName = filePath;
		if (null != filePath && !"".equals(filePath)) {
			int port = filePath.lastIndexOf("\\");
			if(port != -1){
				fileName = filePath.substring(port+1);
			}
		}
		return fileName;
	}

	private String getNewFileName(String originalFileName) {
		StringBuffer newFileName = new StringBuffer();
		if (null != originalFileName && !"".equals(originalFileName)) {
			int port = originalFileName.lastIndexOf(".");
			String type = "";
			String fileName = "";
			if (port != -1) {
				type = originalFileName.substring(port + 1);
				fileName = originalFileName.substring(0, port);
			} else {
				fileName = originalFileName;
			}
			StringBuffer suffix = new StringBuffer("_");
			suffix.append(Calendar.getInstance().getTimeInMillis());
			suffix.append("_");
			suffix.append(new Random().nextInt(100));
			newFileName.append(fileName);
			newFileName.append(suffix);
			newFileName.append(".");
			newFileName.append(type);
		}
		return newFileName.toString();
	}

}

 三、下载的Servlet如下:

/**
 * Apache组件下载
 * 
 * @author mingxue.zhang@163.com
 * @date 2010-10-30
 */
public class DownLoadServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String filePath = "D:\\Tomcat\\apache-tomcat-6.0.26\\webapps\\ApacheUpload\\uploadDir\\";
		String fileName = "2010年10月安排2_1288447490125_56.txt";
		String Originalname = "2010年10月安排2.txt";
		response.setContentType("application/octet-stream");
		String isoFileName = new String(Originalname.getBytes("GB2312"),
				"ISO8859-1");
		response.setHeader("Content-Disposition", "attachment; filename="
				+ isoFileName);
		ServletOutputStream out = response.getOutputStream();
		BufferedOutputStream bufferOut = new BufferedOutputStream(out);
		FileInputStream inputStream = new FileInputStream(new File(filePath,
				fileName));
		BufferedInputStream bufferInput = new BufferedInputStream(inputStream);
		byte[] buffer = new byte[5 * 1024];
		int length = 0;
		while ((length = bufferInput.read(buffer)) != -1) {
			bufferOut.write(buffer, 0, length);
		}
		bufferInput.close();
		inputStream.close();
		bufferOut.close();
		out.close();
	}

}

 Servlet配置如下:

<servlet>
		<servlet-name>UploadServlet</servlet-name>
		<servlet-class>com.mengya.servlet.UploadServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>DownLoadServlet</servlet-name>
		<servlet-class>com.mengya.servlet.DownLoadServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>UploadServlet</servlet-name>
		<url-pattern>/UploadServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>DownLoadServlet</servlet-name>
		<url-pattern>/DownLoadServlet</url-pattern>
	</servlet-mapping>

  

1
1
分享到:
评论
1 楼 rainsilence 2010-11-07  
Commons-fileupload是很经典的编程模型

虽然大部分功能在Servlet3.0中已经有了。但是他提供了Listener接口,用于监听上传进度。

下载的那部分代码,最好不要close ServletOutputStream,而改用flush。还有,你的编码方式很可能在有些浏览器下出错。还有文件的取得方式,并不能适应于全操作系统,而且一旦在EN,JP操作上使用,也会有问题。

相关推荐

    commons-fileupload组件上传问题

    通过阅读这篇博客,开发者可以更好地理解如何在Java Web应用中使用`commons-fileupload`组件实现安全、高效的文件上传功能。 总结起来,`commons-fileupload`组件是处理HTTP文件上传的利器,它简化了文件上传的流程...

    commons-fileupload-1.3.3-bin

    总的来说,Apache Commons FileUpload 1.3.3是Java Web开发中处理文件上传不可或缺的工具,结合Apache Commons IO,可以构建出高效、安全的文件上传功能。这两个库都是Java生态系统的重要组成部分,大大提高了开发...

    java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载

    3. **解析请求**:使用Commons FileUpload库解析请求,获取上传的文件项。 4. **保存文件**:从文件项中获取输入流,然后写入到服务器的某个目录,完成文件上传。 四、文件下载步骤 1. **处理请求**:Servlet接收到...

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    总的来说,`commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 这两个库为Java开发者提供了强大而便捷的文件上传解决方案,它们简化了原本复杂的过程,使开发者可以更专注于业务逻辑,而不是底层的文件处理...

    commons-fileupload组件和commons-io组件

    这两个组件是Java Web开发中的重要工具,特别是对于初学者来说,它们简化了文件上传的复杂过程。 **Commons-Fileupload组件** Commons-Fileupload是Apache Commons项目的一个子项目,专门设计用于处理Servlet容器...

    commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar

    综上所述,这些组件的结合使用,可以构建一个健壮的、能够处理文件上传以及与数据库交互的Java Web应用,是Java开发中常见的技术栈配置。开发者在实际项目中,可以通过这些工具来提升应用的稳定性和效率。

    commons-fileupload.jar和commons-io.jar

    Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...

    commons-fileupload-1.3.2.jar和commons-io-2.5.jar

    Commons FileUpload和Commons IO是Java开发中两个非常重要的库,尤其在处理文件上传功能时。这两个库由Apache软件基金会维护,是许多Java Web应用程序的标准组成部分。 `commons-fileupload-1.3.2.jar`是Apache ...

    commons-fileupload及源码

    总结起来,Apache Commons FileUpload是一个强大的、高度可配置的文件上传组件,它简化了Java Web应用中处理文件上传的复杂性。通过结合使用`commons-fileupload-1.3.1.jar`和`commons-fileupload-1.3.1-sources.jar...

    java 上传 SmartUpload&commons-fileupload

    本主题将深入探讨两种常见的Java上传组件——SmartUpload和Commons-Fileupload。 SmartUpload是一个强大的Java上传组件,由Julien DROUET开发,它为JSP和Servlet提供了方便的文件上传功能。SmartUpload提供了一套...

    commons-fileupload-1.3.2.jar

    总之,Apache Commons FileUpload是Java Web开发中处理文件上传不可或缺的工具,它提供了高效、灵活且安全的文件上传解决方案。通过理解和熟练运用这个库,开发者可以轻松地在自己的应用中实现复杂的文件上传功能。

    commons-fileupload-1.3.1.jar

    "commons-fileupload-1.3.1.jar" 是Apache Commons FileUpload项目的版本1.3.1的Java档案文件,这个库专门设计用于处理HTTP协议中的文件上传功能。在Web开发中,尤其是基于Java的服务器端应用程序,文件上传是常见的...

    commons-fileupload-1.4-bin.zip

    Apache Commons FileUpload库是Java Web开发中不可或缺的一部分,它简化了文件上传操作,使得开发者能够更专注于业务逻辑,而非底层细节。通过理解其工作原理和正确使用方式,可以更好地应对实际项目中的文件上传...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单...

    Commons-fileupload API

    本资源为处理表单文件上传的一个开源组件( Commons-fileupload ),该...注意:使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io;该jar包压缩包中已包含。

    commons-fileupload-1.0上传组件使用实例.

    ### 使用commons-fileupload-1.0进行文件上传的实例及乱码处理 #### 一、commons-fileupload简介 `commons-fileupload`是Apache Commons项目下的一个子项目,它提供了强大的文件上传功能,允许用户轻松地将文件从...

    commons-fileupload-1.4 jar包.rar

    总结,Apache Commons FileUpload是Java Web开发中不可或缺的工具,它简化了文件上传的处理过程,提供了灵活的配置选项和强大的功能。理解并熟练运用这个组件,可以有效地提升开发效率,同时保证上传功能的安全和...

    struts2文件上传组件commons-fileupload-1.2.1.jar

    Apache Commons FileUpload是Java的一个组件,专门用于处理HTTP请求中的多部分数据,即文件上传。在Struts2中,这个库允许用户在表单中上传文件到服务器。1.2.1版本是在2009年发布的,提供了稳定且功能丰富的文件...

Global site tag (gtag.js) - Google Analytics