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>

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值