`
2277259257
  • 浏览: 515280 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Struts2----(多)文件上传和下载使用示例

阅读更多
  1. 其他struts2 文件上传与下载原理 详细资料:http://blog.csdn.net/lisa0220/article/details/6400767
  2. /** 
  3.  * Struts2Test 
  4.  * 使用Struts2上传文件 
  5.  */  
  6. package com.labci.struts2.action;  
  7. import java.io.File;  
  8. import java.io.FileInputStream;  
  9. import java.io.FileOutputStream;  
  10. import java.util.ArrayList;  
  11. import java.util.Arrays;  
  12. import java.util.List;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import org.apache.struts2.interceptor.ServletRequestAware;  
  15. import com.opensymphony.xwork2.ActionSupport;  
  16. public class UploadFileAction extends ActionSupport implements  
  17.         ServletRequestAware {  
  18.     private static final long serialVersionUID = -1896915260152387341L;  
  19.     private HttpServletRequest request;  
  20.     public void setServletRequest(HttpServletRequest req) {  
  21.         this.request=req;  
  22.     }  
  23.       
  24.       
  25.     private List<File> fileName;//这里的"fileName"一定要与页面表单中的文件域名相同(获取上传文件)   
  26.     private List<String> fileNameContentType;//格式同上"fileName"+ContentType(固定格式)   
  27.     private List<String> fileNameFileName;//格式同上"fileName"+FileName(固定格式)
  28.     private String savePath;//文件上传后保存的路径(在struts.xml中配置,也可在后台定义)   
  29.     private String allowTypes;//允许上传的文件类型(在struts.xml中配置,也可在后台定义)   
  30.       
  31.     public List<File> getFileName() {  
  32.         return fileName;  
  33.     }  
  34.   
  35.     public void setFileName(List<File> fileName) {  
  36.         this.fileName = fileName;  
  37.     }  
  38.   
  39.     public List<String> getFileNameContentType() {  
  40.         return fileNameContentType;  
  41.     }  
  42.   
  43.     public void setFileNameContentType(List<String> fileNameContentType) {  
  44.         this.fileNameContentType = fileNameContentType;  
  45.     }  
  46.   
  47.     public List<String> getFileNameFileName() {  
  48.         return fileNameFileName;  
  49.     }  
  50.   
  51.     public void setFileNameFileName(List<String> fileNameFileName) {  
  52.         this.fileNameFileName = fileNameFileName;  
  53.     }  
  54.   
  55.     @SuppressWarnings("deprecation")  
  56.     public String getSavePath() {  
  57.         return request.getRealPath(savePath);  
  58.     }  
  59.   
  60.     public void setSavePath(String savePath) {  
  61.         this.savePath = savePath;  
  62.     }  
  63.     public String getAllowTypes() {  
  64.         return allowTypes;  
  65.     }  
  66.   
  67.     public void setAllowTypes(String allowTypes) {  
  68.         this.allowTypes = allowTypes;  
  69.     }  
  70.       
  71.     @Override  
  72.     public String execute() throws Exception {  
  73.         //验证上传的文件   
  74.         List<String> fileTypes=getFileNameContentType(); ---获得上传文件的类型 
  75.         String []allowTypes=getAllowTypes().split(",");         ---获得配置的允许上传文件类型
  76.         List<String> typesList=Arrays.asList(allowTypes);  
  77.           
  78.         boolean allowFlag=true; --是否存在不允许上传的文件类型   
  79.         for(String type:fileTypes){  
  80.             if(!typesList.contains(type)){  
  81.                 allowFlag=false;  
  82.                 break;  
  83.             }  
  84.         }  
  85.         if(!allowFlag){  
  86.             request.setAttribute("fileTypeError",   
  87.               "您上传的文件中存在不允许上传的类型,允许上传的类型为:"+getAllowTypes());  
  88.             return INPUT;  
  89.         }  
  90.           
  91.         //指定文件保存的路径  
  92.         File dir=new File(getSavePath());  
  93.         if(!dir.exists()){  
  94.             dir.mkdirs();  
  95.         }  
  96.         List<File> files=getFileName();  ---获取所有上传的文件
  97.         for(int i=0;i<files.size();i++){  
  98.             //构造服务器内存写入磁盘的输出流
  99.             FileOutputStream fos=new FileOutputStream(getSavePath()+"//"+getFileNameFileName().get(i));  
  100.             //构造服务器内存读取上传文件的输入流
  101.             FileInputStream fis=new FileInputStream(getFileName().get(i));  
  102.             byte []buffers=new byte[1024];  
  103.             int len=0;  
  104.             while((len=fis.read(buffers))!=-1){  //读取文件
  105.                 fos.write(buffers,0,len);                //写入文件
  106.             }  
  107.         }  
  108.           
  109.          //构造返回页面的数据
  110.         List<String> fileHrefsList=new ArrayList<String>();  
  111.         for(String fileName:getFileNameFileName()){  ---遍历所有上传文件的名称
  112.             String href="<a href="/" mce_href="/""downloadFile.action?fileName="+fileName+"/">"+fileName+"</a>";  
  113.             fileHrefsList.add(href);  
  114.         }  
  115.         request.setAttribute("fileNameList", fileHrefsList);  
  116.         return SUCCESS;  
  117.     }  
  118.   
  119. }  

----------------------------------------index.jsp---------------------------------------------------------------------------

  1. <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>Struts2多文件上传</title>  
  7.   </head>  
  8.     
  9.   <body>  
  10.     <table>  
  11.         <tr>  
  12.             <td>  
  13.                 <c:choose>  
  14.                     <c:when test="${!empty fileTypeError}">  
  15.                         <font color="red"><b>${fileTypeError}</b></font>  
  16.                     </c:when>  
  17.                     <c:otherwise>  
  18.                         <c:forEach items="${fileNameList}" var="fileName">  
  19.                             ${fileName}<br/>  
  20.                         </c:forEach>  
  21.                     </c:otherwise>  
  22.                 </c:choose>  
  23.             </td>  
  24.         </tr>       
  25.     </table>  
  26.     <!-- 不一定要选择所有文件才可以上传 -->  
  27.     <form action="uploadFile.action" method="post" enctype="multipart/form-data">  
  28.         <input type="file" name="fileName"/><br/>  
  29.         <input type="file" name="fileName"/><br/>  
  30.         <input type="file" name="fileName"/><br/>  
  31.         <input type="submit" value="上传"/>  
  32.     </form>  
  33.   </body>  
  34. </html> 

---------------------------------------web.xml--------------------------------------------------------------------------------

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.     <filter>  
  7.         <filter-name>struts2</filter-name>  
  8.         <filter-class>  
  9.             org.apache.struts2.dispatcher.FilterDispatcher  
  10.         </filter-class>  
  11.     </filter>  
  12.     <filter-mapping>  
  13.         <filter-name>struts2</filter-name>  
  14.         <url-pattern>*.action</url-pattern>  
  15.     </filter-mapping>  
  16.     <welcome-file-list>  
  17.         <welcome-file>index.jsp</welcome-file>  
  18.     </welcome-file-list>  
  19. </web-app>  

-------------------------------------struts.xml------------------------------------------------------------------------

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <constant name="struts.devMode" value="false" />  
  7.     <!-- 改变struts2默认为2M的上传文件大小限制 -->  
  8.     <constant name="struts.multipart.maxSize" value="10240000"/>  
  9.     <package name="upload" extends="struts-default">  
  10.         <action name="uploadFile" class="com.labci.struts2.action.UploadFileAction">  
  11.             <param name="savePath">/upload</param>  
  12.             <param name="allowTypes">text/plain,text/xml,text/html,image/gif,image/png,image/jpeg,image/jpg,image/bmp</param>  
  13.             <result name="success">index.jsp</result>  
  14.             <result name="input">index.jsp</result>  
  15.         </action>  
  16.         <action name="downloadFile" class="com.labci.struts2.action.DownloadFileAction">  
  17.             <param name="savePath">/upload</param>  
  18.             <result name="success">index.jsp</result>  
  19.         </action>  
  20.     </package>  
  21. </struts>  

=============================下载========================================================

  1. /** 
  2.  * Struts2Test 
  3.  * 文件下载的Action 
  4.  */  
  5. package com.labci.struts2.action;  
  6. import java.io.FileInputStream;  
  7. import java.io.InputStream;  
  8. import java.io.OutputStream;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import org.apache.struts2.interceptor.ServletRequestAware;  
  12. import org.apache.struts2.interceptor.ServletResponseAware;  
  13. import com.opensymphony.xwork2.ActionSupport;  
  14. public class DownloadFileAction extends ActionSupport implements  
  15.         ServletRequestAware, ServletResponseAware {  
  16.     private static final long serialVersionUID = -7448748577778248376L;  
  17.     private HttpServletRequest request;  
  18.     private HttpServletResponse response;  
  19.     private String savePath;  //文件上传后保存的路径(在struts.xml中配置,也可在后台定义)
  20.       
  21.     @Override  
  22.     public String execute() throws Exception {  
  23.           
  24.         String fileName=request.getParameter("fileName");---页面请求参数文件名(上传返回页面时指定的)
  25.         String fullPath=getSavePath()+"//"+fileName;          //构造文件源的完整路径
  26.         fileName=new String(fileName.getBytes("utf-8"),"iso-8859-1");  
  27.         InputStream is=new FileInputStream(fullPath);     //构造服务器内存读取源文件的输入流
  28.         int len=0;  
  29.         byte []buffers=new byte[1024];  
  30.         response.reset();  
  31.         response.setContentType("application/x-msdownload");  ---设置文件返回页面的类型
  32.         response.addHeader("Content-Disposition""attachment;filename=/""+fileName+"/"");---返回的名称
  33.           
  34.         //把文件内容通过输出流打印到页面上供下载   
  35.         while((len=is.read(buffers))!=-1){                             //内存读取
  36.             OutputStream os=response.getOutputStream();  //获得输出文件的流
  37.             os.write(buffers, 0, len);                                       //输出
  38.         }  
  39.         is.close();    
  40.         return SUCCESS;  
  41.     }  
  42.     public void setServletRequest(HttpServletRequest req) {  
  43.         this.request=req;  
  44.     }  
  45.     public void setServletResponse(HttpServletResponse resp) {  
  46.         this.response=resp;  
  47.     }  
  48.     @SuppressWarnings("deprecation")  
  49.     public String getSavePath() {  
  50.         return request.getRealPath(savePath);  
  51.     }  
  52.     public void setSavePath(String savePath) {  
  53.         this.savePath = savePath;  
  54.     }  
  55.       
  56. }  

---------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 68.1 KB
分享到:
评论

相关推荐

    struts-2.5.22-all.zip

    除此之外,Struts2还依赖于其他一些库,如OGNL(Object-Graph Navigation Language)用于表达式语言,Freemarker或Velocity用于视图模板,以及各种插件来支持特定的功能,如文件上传、JSON处理等。 在标签中提到了...

    struts2-4标签库文件上传下载

    其中,文件上传和下载功能是Struts2标签库的一个亮点,不仅易于学习,而且非常实用。 #### 标签库分类 Struts2标签库大致可以分为以下几类: - **用户界面标签库(UI标签库)**:主要用于处理与用户交互有关的...

    struts2-apps.rar

    "struts2-apps.rar"这个压缩包文件包含了多个示例项目,可以帮助学习者深入理解Struts2框架的工作原理和实践应用。 1. **Struts2框架核心概念**: - **Action类**:在Struts2中,Action类是业务逻辑的主要载体,它...

    Struts2VulsTools-Struts2系列漏洞检查工具

    优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...

    struts2中的文件上传和下载示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    完整struts2文件上传示例

    在Struts2中,实现文件上传并不复杂,但需要理解其背后的原理和配置。以下是对"完整Struts2文件上传示例"的详细解释: 1. **配置Struts2框架** 在Struts2中,我们首先需要在`struts.xml`配置文件中添加相关的拦截...

    struts2_uploadify带进度条的多文件上传下载

    总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...

    Struts2多个文件上传

    总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...

    Struts2实现单个文件多个文件上传与下载-多个拦截器

    本项目主要展示了如何在Struts2框架下实现单个文件和多个文件的上传及下载,并且运用了多个拦截器来增强功能和安全性。 首先,让我们详细了解一下文件上传的过程。在Struts2中,文件上传主要依赖于`struts2-...

    struts2-文件上传-配置

    在Struts2框架中,实现文件上传需要进行一系列配置和编程。下面我们将深入探讨Struts2文件上传的配置和实现。 首先,为了支持文件上传,我们需要在Struts2的核心配置文件`struts.xml`中添加相应的拦截器。Struts2...

    struts2-jar包

    最后,Struts2作为一个成熟的框架,提供了强大的表单验证、国际化、文件上传下载等功能,而且社区活跃,拥有丰富的文档和示例,对于快速构建Java web应用非常有帮助。但随着技术的发展,Spring Boot等现代框架的兴起...

    Struts2.3.4-all

    4. **插件增强**:Struts2支持丰富的插件体系,例如Freemarker模板引擎、JSON支持、文件上传下载等。Struts2.3.4版本可能增强了某些插件的功能或兼容性。 5. **配置简化**:框架可能对配置文件进行了改进,使得配置...

    struts2-upfile

    Struts2可以与之集成,处理大文件上传和多文件上传,提供更高级的功能,如分块上传、断点续传等。 7. **服务器端文件存储**:上传的图片需要在服务器上存储,可以选择临时目录、特定的上传目录或数据库。存储策略...

    K8_Struts2_EXP S2-045 & 任意文件上传 20170310

    总结来说,这个压缩包可能包含的是一个关于如何识别、利用以及防御Struts2 S2-045漏洞和任意文件上传攻击的工具或者示例代码。对于开发人员和系统管理员来说,理解并掌握这些知识有助于提高系统的安全性,防止潜在的...

    struts2 文件上传和下载示例程序

    这个“Struts2 文件上传和下载示例程序”是一个演示如何在Struts2中实现这两个功能的实例。 文件上传是Web应用程序中的一项重要功能,允许用户从本地计算机选择文件并将其传输到服务器。在Struts2中,这一过程涉及...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    struts2文件上传下载示例

    本示例将详细介绍如何在Struts2框架下实现单一文件上传、多文件上传以及文件下载功能。 1. 单一文件上传: 在Struts2中,我们可以使用`org.apache.struts2.interceptor.FileUploadInterceptor`拦截器来处理文件...

    Struts2文件上传程序示例

    总之,Struts2文件上传程序示例是一个实用的教学资源,它涵盖了文件上传的基本流程和关键配置,包括前端表单设计、后端Action处理、配置文件设置等。对于初学者来说,这是一个很好的起点,可以深入理解MVC框架中文件...

    struts文件上传示例

    在这个"Struts文件上传示例"中,我们将深入探讨如何在Struts框架下实现文件上传功能,以及相关的关键知识点。 首先,理解文件上传的基本流程至关重要。在Web应用中,用户通过表单选择本地文件,然后提交到服务器。...

Global site tag (gtag.js) - Google Analytics