java利用commons-fileupload组件实现文件的上传与下载

利用commons-fileupload以及commons-io包,实现文件的上传与下载。附上主要的代码:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.zxw.fileupdown.DB;
import com.zxw.fileupdown.InsertInfo;

import java.sql.*;
import java.util.Iterator;
import java.util.List;

public class UploadServlet extends HttpServlet {
	public UploadServlet() {
		super();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		
		DiskFileItemFactory disk = new DiskFileItemFactory();
		disk.setSizeThreshold(1024 * 5);//设置上传缓冲区容量为5k
		String servletPath = this.getServletContext().getRealPath("/");//获得服务器所在地址
		String tempFile = "tempFile";
		String path = servletPath + tempFile;
		File file = new File(path);
		if(!file.exists()) {
			file.mkdirs();
		}
		disk.setRepository(file);
		
		long maxsize = 1024 * 1024 * 5; 
		//创建能够解析上传文件的二进制流的类
		ServletFileUpload sfu = new ServletFileUpload(disk);
		sfu.setSizeMax(maxsize);//限制最大上传容量为5M
		List<FileItem> list = null;
		try {
			list = sfu.parseRequest(request);
		} catch (FileUploadException e) {
			out.println("<script language='javascript'>");
			out.println("alert('上传文件失败')");
			out.println("</script>");
		}
		
		Iterator it = null;;
		try {
			it = list.iterator();
		} catch(NullPointerException e) {
			out.println("<script language='javascript'>");
			out.println("alert('不支持你所上传文件的类型')");
			out.println("</script>");
		} finally {
			response.sendRedirect("upload.html");
		}
		
		if(it != null) {
			int n = 0;
			while(it.hasNext()) {
				FileItem fileItem = (FileItem)it.next();
				
				if(!fileItem.isFormField()) { //为文件上传域
					String locPath = fileItem.getName();
					if(!locPath.equals("")) {
						Boolean isSuc = false;
						//获得上传文件名
						int in = locPath.lastIndexOf("\\");
						String filename = locPath.substring(in + 1);
						
						long filesize = fileItem.getSize();
						String filepath = tempFile;
						//绝对路径
						String absoPath = path + "\\" + filename;
						File f = new File(absoPath);
						FileOutputStream fos = new FileOutputStream(f, true);
						
						if(fileItem.isInMemory()) {
							try {
								fos.write(fileItem.get());
								out.println("<script language='javascript'>");
								out.println("alert('上传文件成功')");
								out.println("</script>");
								isSuc = true;
								++n;
								//response.sendRedirect("upload.html");
							} catch(IOException e) {
								out.println("<script language='javascript'>");
								out.println("alert('上传文件失败')");
								out.println("</script>");
							} finally {
								fos.close();
								//response.sendRedirect("download.jsp");
							}
						} else {
							InputStream is = null;
							try {
								is = fileItem.getInputStream();
								int i = -1;//文件是否读完标志
								byte[] b = new byte[1024];
								i = is.read(b);
								while(i > 0) {
									fos.write(b, 0, i);
									i = is.read(b);
								}
								out.println("<script language='javascript'>");
								out.println("alert('上传文件成功')");
								out.println("</script>");
								isSuc = true;
								++n;
							} catch(IOException e) {
								out.println("<script language='javascript'>");
								out.println("alert('上传文件失败')");
								out.println("</script>");
								
							} finally {
								is.close();
								fos.flush();
								fos.close();
								//response.sendRedirect("download.jsp");
							}
						}
						
						if(isSuc) {
							InsertInfo insert = new InsertInfo();
							insert.insert(filename, filepath, filesize);
						}
						
					}
	
				}
			}
		}
		
		
		out.flush();
		out.close();
	}
}


 

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;

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


public class DownServlet extends HttpServlet {
	public DownServlet() {
		super();
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.reset();
		
		response.setContentType("application/x-download");
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		
		String name = request.getParameter("filename");
		String filename = new String(name.getBytes("ISO-8859-1"), "utf-8");//转码
		String servletPath = this.getServletContext().getRealPath("/");
		String path = "" + servletPath + "tempFile" + "\\" + filename;
		
		File file = new File(path);
		InputStream is = new FileInputStream(file);
		OutputStream os = response.getOutputStream();

		response.addHeader("Content-Disposition", "attachment:filename=" + URLEncoder.encode("" + filename));
		response.addHeader("Content-Length", (new Long(file.length())).toString());
		
		int i = -1;
		byte b[] = new byte[1024];
		i = is.read(b);
		while(i != -1) {
			os.write(b, 0, i);
			i = is.read(b);
		}
		
		is.close();
		os.flush();
		os.close();
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
	
	

}


以上两个分别是处理文件上传和文件下载的servlet。

一下是效果图:

 

 

其他资源请在这里下载。

commons-fileupload包请在这里下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值