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

相关文章

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结