commons-fileupload实现文件上传、下载、在线打开

 最近做了一个文件上传、下载、与在线打开文件的功能,刚开始对文件上传的界面中含有其它表单(例如输入框、密码等)在上传的过程中遇到了许多问题,下面我写了一个同时实现文件上传、下载、在线打开文件的测试程序。

        首先请看效果图

               

 

       核心代码: 

[java]  view plain copy
  1. package com.jefry;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.net.URL;  
  7. import java.util.ArrayList;  
  8. import java.util.Iterator;  
  9. import java.util.List;  
  10.   
  11. import javax.servlet.ServletException;  
  12. import javax.servlet.ServletOutputStream;  
  13. import javax.servlet.http.HttpServlet;  
  14. import javax.servlet.http.HttpServletRequest;  
  15. import javax.servlet.http.HttpServletResponse;  
  16.   
  17.   
  18. import org.apache.commons.fileupload.FileItem;  
  19. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  20. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  21.   
  22. /** 
  23.  * Servlet implementation class FileUpload 
  24.  */  
  25. public class FileUpload extends HttpServlet {  
  26.     private static final long serialVersionUID = 1L;  
  27.     private static final String fileDir = "F:/";  
  28.     /** 
  29.      * Default constructor. 
  30.      */  
  31.     public FileUpload() {  
  32.           
  33.     }  
  34.   
  35.     protected void doGet(HttpServletRequest request,  
  36.             HttpServletResponse response) throws ServletException, IOException {  
  37.       
  38.         String aFileName = request.getParameter("fileName");   
  39.         String online = request.getParameter("online");  
  40.         FileInputStream in = null;   
  41.         ServletOutputStream out = null;   
  42.         boolean isOnLine = online != null ? true : false ;  
  43.         try {  
  44.           
  45.               
  46.             if(isOnLine){   
  47.                 URL u = new URL("file:///"+fileDir + aFileName);  
  48.                 response.setContentType(u.openConnection().getContentType());  
  49.                 response.setHeader("Content-Disposition""inline; filename="+aFileName);     
  50.              }  
  51.             else{   
  52.                 response.setContentType("application/x-msdownload");   
  53.                 response.setHeader("Content-Disposition""attachment; filename=" + aFileName);   
  54.             }  
  55.           
  56.             in = new FileInputStream(fileDir + aFileName);   
  57.             out = response.getOutputStream();  
  58.             out.flush();  
  59.             int aRead = 0;  
  60.             while ((aRead = in.read()) != -1 & in != null) {  
  61.                 out.write(aRead);  
  62.              }  
  63.             out.flush();  
  64.               
  65.         } catch (Throwable e) {  
  66.             e.printStackTrace();  
  67.         } finally {  
  68.             try {  
  69.                 in.close();  
  70.                 out.close();  
  71.             } catch (Throwable e) {  
  72.                 e.printStackTrace();  
  73.             }  
  74.         }  
  75.   
  76.     }  
  77.   
  78.     protected void doPost(HttpServletRequest request,  
  79.             HttpServletResponse response) throws ServletException, IOException {  
  80.         try {  
  81.             DiskFileItemFactory fileFactory = new DiskFileItemFactory();  
  82.             ServletFileUpload fu = new ServletFileUpload(fileFactory);  
  83.             List fileItems = fu.parseRequest(request);  
  84.             Iterator iter = fileItems.iterator();  
  85.             String uploader = null;  
  86.             String date = null;  
  87.             List<String> fileNames = new ArrayList<String>();  
  88.             while (iter.hasNext()) {  
  89.                 FileItem item = (FileItem) iter.next();  
  90.                 if (!item.isFormField()) { // 文件  
  91.                     String oldFileName = item.getName();  
  92.                     String newFileName = null;  
  93.                     int delimiter = oldFileName.lastIndexOf("/");  
  94.                     if (delimiter == -1)  
  95.                         newFileName = oldFileName.substring(delimiter + 1);  
  96.                     else  
  97.                         newFileName = oldFileName;  
  98.                     fileNames.add(newFileName);  
  99.                     item.write(new File(fileDir + newFileName));  
  100.                 } else { // 表单  
  101.                     String fieldName = item.getFieldName();  
  102.                     if ("uploader".equals(fieldName)) {  
  103.                         uploader = item.getString();  
  104.                     } else if ("date".equals(fieldName)) {  
  105.                         date = item.getString();  
  106.                     }  
  107.                 }  
  108.             }  
  109.             request.setAttribute("fileNames",fileNames);  
  110.             request.getRequestDispatcher("download.jsp").forward(request, response);  
  111.         } catch (Exception e) {  
  112.   
  113.         }  
  114.     }  
  115.   
  116. }  


  index.jsp

[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.  <form action="FileUpload" method="post" enctype="multipart/form-data">  
  11.  <br>  
  12.    文件一:<input type="file" name="file1" /> <br>  
  13.     文件二:<input type="file" name="file2" /> <br>  
  14.         上传者:<input type="text" name="uploader"/> <br>  
  15.              日期:<input type="text" name="date"/> <br>  
  16.             <input type="submit" value="提交"/>  
  17.     
  18.  </form>  
  19. </body>  
  20. </html>  

 

download.jsp

[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4.   
  5. <%@page import="java.util.List"%><html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  8. <title>Insert title here</title>  
  9. </head>  
  10. <body>  
  11.    
  12.  <br>  
  13.   --------------直接下载------------  
  14.      <br>  
  15.       <%  
  16.         List<String> fileNames = (List<String> )request.getAttribute("fileNames");   
  17.         for(String fileName : fileNames) {  
  18.       %>  
  19.        
  20.         <form action="FileUpload" method="get">  
  21.             <input type="hidden" name="fileName" value="<%=fileName %>" />  
  22.             <input type="submit" value="下载:<%=fileName %>" />  
  23.         </form>  
  24.      <%  
  25.         }  
  26.      %>  
  27.      <br>  
  28.       --------------直接打开---------  
  29.      <%   
  30.        for(String fileName : fileNames) {  
  31.       %>  
  32.         <form action="FileUpload" method="get">  
  33.             <input type="hidden" name="fileName" value="<%=fileName %>" />  
  34.             <input type="hidden" name="online" value="yes" />  
  35.             <input type="submit" value="打开:<%=fileName %>" />  
  36.         </form>  
  37.      <%  
  38.         }  
  39.      %>  
  40.      </br>  
  41.   
  42. </body>  
  43. </html>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值