`
2277259257
  • 浏览: 499042 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    Struts2VulsTools-Struts2系列漏洞检查工具

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

    完整struts2文件上传示例

    最近在做struts2的学习研究,这里共享一份完整能运行的示例

    struts2文件上传下载示例

    基于struts2实现了单一文件上传,多文件上传和文件下载的功能.

    Struts2漏洞检查工具2018版.exe

    增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...

    struts文件上传示例

    struts 上传文件的示例,是一个myeclipse工程

    Struts2文件上传程序示例

    本程序为struts2文件是上传程序。解压后就可以使用。程序比较简单适合于初学者。奔驰呢工序仅供参考。严禁用于其他用途

    Struts2下多文件的上传与下载

    Struts2下多文件的上传与下载,包含详细的示例

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

    struts2 文件上传和下载示例程序 http://blog.csdn.net/zhiweiv/archive/2008/10/13/3070610.aspx

    struts2文件、图片上传示例

    文件上传代码示例,使用了struts,简单易懂

    Struts2文件上传示例

    自己使用struts2写的一个文件上传示例代码,可以实现对文件的大小控制、格式控制等,里面注释写得比较详细,给大家分享一下子

    Struts2漏洞检查工具2017版.zip

    有对漏洞的命令执行功能、文件上传功能。还有批量验证功能。增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过部分WAF防护,存在S2-045就存在S2-046。增加S2-...

    Struts2+uploadify上传文件

    struts2 + uploadify上传文件示例

    Struts2漏洞检查工具2018版.zip

    增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...

    Struts2文件上传下载

    利用Struts2实现的文件上传和下载,可以实现多文件上传,下载有管控。仅示例代码,高手勿看!

    Struts1.x的上传文件示例

    Struts1.x的上传文件示例。Struts1.x的教程参考我的Blog:http://blog.csdn.net/boyazuo

    Struts2多文件上传下载源码

    Struts2 文件 多文件上传下载 示例 ,如何获取真实的上传文件名的规则,部署后就可用,工程中包含所有jar包

    Extjs Tree + JSON + Struts2 示例源代码

    在我的随笔Extjs Tree + JSON + Struts2中我介绍了如何异步加载一个Extjs的树,但是很多网友留言说不能成功操作。现在我自己做了一个所有源代码的包,供大家下载。 有几点事项请大家注意 1、blogjava的文件上载要求...

    struts2文件上传

    struts2文件上传,包含了单个文件上传和多文件上传的代码示例

Global site tag (gtag.js) - Google Analytics