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

来源:互联网 发布:网络交往新空间 编辑:程序博客网 时间:2024/06/05 02:21

利用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);//设置上传缓冲区容量为5kString 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);//限制最大上传容量为5MList<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();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}


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

一下是效果图:

 

 

其他资源请在这里下载。

commons-fileupload包请在这里下载。

原创粉丝点击