转载自:http://blog.csdn.net/lisq037/article/details/9014563
- 【1】支持中文名称文件(源文件中文名称、下载另存为为中文名称)
- 【2】加入session判断,还可进行权限控制
action类:
- package com.fsti.ssh.action;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import org.apache.log4j.Logger;
- import org.apache.struts2.ServletActionContext;
- /**
- * 文件下载 【1】支持中文文件名称 【2】加入session判断,还可进行权限控制
- *
- * @author deniro
- */
- public class FileDownloadAction extends AuthorityAction {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- static Logger log = Logger.getLogger(FileDownloadAction.class);
- /**
- * 被下载的资源路径
- */
- private String inputPath;
- public void setInputPath(String inputPath) {
- this.inputPath = inputPath;
- }
- /**
- * 文件名
- */
- private String fileName;
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- /**
- * 获取下载显示的文件名称
- *
- * @return
- */
- public String getDownloadFileName() {
- String downFileName = fileName;
- try {
- downFileName = new String(downFileName.getBytes(), "ISO8859-1");
- } catch (UnsupportedEncodingException e) {
- log.error("获取下载显示的文件名称",e);
- }
- return downFileName;
- }
- /**
- * 配置stream类型结果时,需指定inputName;inputName为方法名去掉get前缀,并且首字母小写的字符串;
- * 比如此例中的inputName为 targetFile
- *
- * @return
- */
- public InputStream getTargetFile() {
- InputStream resourceAsStream = ServletActionContext.getServletContext().getResourceAsStream(
- inputPath);
- log.info("resourceAsStream:"+resourceAsStream);//若为NULL,则说明未取到文件,请确认文件路径是否正确。
- return resourceAsStream;
- }
- }
- <!-- 指定struts2 DTD信息 -->
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
- "http://struts.apache.org/dtds/struts-2.1.7.dtd">
- <struts>
- <package name="download" extends="struts-default">
- <action name="download" class="com.fsti.ssh.action.FileDownloadAction">
- <!-- 被下载的资源路径 -->
- <param name="inputPath">\WEB-INF\download\灯塔.jpg</param>
- <!-- 下载显示的文件名称 -->
- <param name="fileName">灯塔.jpg</param>
- <result name="success" type="stream">
- <!-- 指定下载文件的文件类型 -->
- <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
- <!-- 指定stream方法名称 -->
- <param name="inputName">targetFile</param>
- <!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,默认为直接显示文件 -->
- <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
- <!-- 指定下载文件的缓冲大小 -->
- <param name="bufferSize">4096</param>
- </result>
- </action>
- </package>
- </struts>
jsp页面:
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>文件下载(支持中文文件名称)</title>
- </head>
- <body>
- <p><span><a href="download.action" target="_blank">下载</a></span></p>
- <div class="divider"></div>
- <ul>
- <li>【1】支持中文名称文件(源文件中文名称、下载另存为为中文名称)</li>
- <li>【2】加入session判断,还可进行权限控制</li>
- </ul>
- </body>
- </html>