- 【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;
}
}
struts配置文件:
<!-- 指定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>