关于Struts2文件下载的问题,首先要准备好一下几个包:

Struts2 文件下载_文件下载

新建一个项目,整体架构如下(可以忽略掉Upload,因为那是我前面写上传的时候用的):

Struts2 文件下载_struts2_02

接着就通过一下实例来实现吧。

1、DownloadAction.java

  1. package com.action; 
  2.  
  3. import java.io.InputStream; 
  4.  
  5. import org.apache.struts2.ServletActionContext; 
  6.  
  7. import com.opensymphony.xwork2.ActionSupport; 
  8.  
  9. public class DownloadAction extends ActionSupport{ 
  10.     private String inputPath;   //该属性可以在配置文件中动态指定该属性值 
  11.      
  12.     /** 
  13.      * 依赖注入该属性值的setter方法 
  14.      * @param inputPath 
  15.      */ 
  16.     public void setInputPath(String inputPath) { 
  17.         this.inputPath = inputPath; 
  18.     } 
  19.      
  20.     /** 
  21.      * 定义一个返回InputStream的方法;该方法将作为被下载文件的入口 
  22.      * 且需要配置stream类型结果时指定inputName参数 
  23.      * InputName参数的值就是方法去掉个体前缀,首字母小写的字符串 
  24.      * @return 
  25.      */ 
  26.     public InputStream getTargetFile() { 
  27.         //ServeltContext提供getResourceAsStream()方法返回指定文件对应的输入流 
  28.         return ServletActionContext.getServletContext().getResourceAsStream(inputPath); 
  29.     } 

2.Struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 
  3. <struts> 
  4.     <constant name="struts.custom.i18n.resources" value="mess" /> 
  5.     <constant name="struts.i18n.encoding" value="UTF-8" /> 
  6.     <constant name="struts.devMode" value="true"></constant> 
  7.     <package name="lee" extends="json-default"> 
  8.         <!-- 文件上传  --> 
  9.         <action name="uploadAction"  
  10.          
  11.         <!-- 文件下载  --> 
  12.         <action name="downloadAction" class="com.action.DownloadAction"> 
  13.          
  14.             <!-- 指定被下载内容的位置 --> 
  15.             <param name="inputPath">/upload/123.jpg</param> 
  16.              
  17.             <result name="success" type="stream"> 
  18.                 <!-- 制定下载文件的文件类型 --> 
  19.                 <param name="contentType">p_w_picpath/jpg</param> 
  20.                  
  21.                 <!-- 指定由getTargetFile()方法返回被下载文件的InputStream  --> 
  22.                 <param name="inputName">targetFile</param> 
  23.                  
  24.                 <param name="contentDisposition">p_w_upload;filename="123.jpg"</param> 
  25.                  
  26.                 <!-- 指定下载文件的缓冲大小 --> 
  27.                 <param name="bufferSize">4096</param> 
  28.             </result> 
  29.         </action> 
  30.     </package> 
  31. </struts>     

 

success.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
  5. %>  
  6. <%@taglib prefix="s" uri="/struts-tags" %>  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9. <head>  
  10. <base href="&lt;%=basePath%>"&gt;  
  11. <title>My JSP 'success.jsp' starting page</title>  
  12. </head>  
  13. <body>  
  14. 文件 <b><a href="downloadAction.action?filename=123.jpg" target="_black">123.jpg</a></b> 上传成功! <br>  
  15. </body>  
  16. </html> 

 

 

然后部署后运行效果图如下:

Struts2 文件下载_java_03

点击“123.jpg”文件后弹出窗口下载:

Struts2 文件下载_文件下载_04