struts2使用action方式实现文件下载(支持中文文件名)

来源:互联网 发布:ifunbox中文版 mac 编辑:程序博客网 时间:2024/06/01 11:01

转载自:http://blog.csdn.net/lisq037/article/details/9014563

目录(?)[+]

  • 【1】支持中文名称文件(源文件中文名称、下载另存为为中文名称)
  • 【2】加入session判断,还可进行权限控制

action类:

[java] view plaincopy
  1. package com.fsti.ssh.action;  
  2.   
  3. import java.io.InputStream;  
  4. import java.io.UnsupportedEncodingException;  
  5.   
  6. import org.apache.log4j.Logger;  
  7. import org.apache.struts2.ServletActionContext;  
  8.   
  9. /** 
  10.  * 文件下载 【1】支持中文文件名称 【2】加入session判断,还可进行权限控制 
  11.  *  
  12.  * @author deniro 
  13.  */  
  14. public class FileDownloadAction extends AuthorityAction {  
  15.     /** 
  16.      *  
  17.      */  
  18.     private static final long serialVersionUID = 1L;  
  19.       
  20.     static Logger log = Logger.getLogger(FileDownloadAction.class);  
  21.       
  22.     /** 
  23.      * 被下载的资源路径 
  24.      */  
  25.     private String inputPath;  
  26.   
  27.     public void setInputPath(String inputPath) {  
  28.         this.inputPath = inputPath;  
  29.     }  
  30.   
  31.     /** 
  32.      * 文件名 
  33.      */  
  34.     private String fileName;  
  35.       
  36.       
  37.   
  38.     public void setFileName(String fileName) {  
  39.         this.fileName = fileName;  
  40.     }  
  41.   
  42.     /** 
  43.      * 获取下载显示的文件名称 
  44.      *  
  45.      * @return 
  46.      */  
  47.     public String getDownloadFileName() {  
  48.         String downFileName = fileName;  
  49.         try {  
  50.             downFileName = new String(downFileName.getBytes(), "ISO8859-1");  
  51.         } catch (UnsupportedEncodingException e) {  
  52.             log.error("获取下载显示的文件名称",e);  
  53.         }  
  54.         return downFileName;  
  55.     }  
  56.   
  57.     /** 
  58.      * 配置stream类型结果时,需指定inputName;inputName为方法名去掉get前缀,并且首字母小写的字符串; 
  59.      * 比如此例中的inputName为 targetFile 
  60.      *  
  61.      * @return 
  62.      */  
  63.     public InputStream getTargetFile() {  
  64.         InputStream resourceAsStream = ServletActionContext.getServletContext().getResourceAsStream(  
  65.                 inputPath);  
  66.         log.info("resourceAsStream:"+resourceAsStream);//若为NULL,则说明未取到文件,请确认文件路径是否正确。  
  67.         return resourceAsStream;  
  68.     }  
  69. }  


struts配置文件:

[html] view plaincopy
  1. <!-- 指定struts2 DTD信息 -->  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5.   
  6. <struts>  
  7.       
  8.     <package name="download" extends="struts-default">  
  9.         <action name="download" class="com.fsti.ssh.action.FileDownloadAction">  
  10.             <!-- 被下载的资源路径 -->  
  11.             <param name="inputPath">\WEB-INF\download\灯塔.jpg</param>  
  12.             <!-- 下载显示的文件名称 -->  
  13.             <param name="fileName">灯塔.jpg</param>  
  14.             <result name="success" type="stream">  
  15.                 <!-- 指定下载文件的文件类型 -->  
  16.                 <param name="contentType">application/octet-stream;charset=ISO8859-1</param>  
  17.                 <!-- 指定stream方法名称 -->  
  18.                 <param name="inputName">targetFile</param>  
  19.                 <!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,默认为直接显示文件 -->  
  20.                 <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>  
  21.                 <!-- 指定下载文件的缓冲大小 -->                
  22.                 <param name="bufferSize">4096</param>  
  23.             </result>  
  24.         </action>  
  25.     </package>  
  26.       
  27. </struts>  

jsp页面:

[html] view plaincopy
  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>文件下载(支持中文文件名称)</title>  
  8. </head>  
  9. <body>  
  10.   
  11.     <p><span><a href="download.action" target="_blank">下载</a></span></p>  
  12.     <div class="divider"></div>  
  13.     <ul>  
  14.         <li>【1】支持中文名称文件(源文件中文名称、下载另存为为中文名称)</li>  
  15.         <li>【2】加入session判断,还可进行权限控制</li>  
  16.     </ul>  
  17. </body>  
  18. </html>  

0 0