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

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima