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

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S