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

2024-06-11 19:08

本文主要是介绍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>  

这篇关于commons-fileupload实现文件上传、下载、在线打开的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052030

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too