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 {
/**
*
*/
public String getDownloadFileName() {
String myAttachment = (String)ServletActionContext.getRequest().getParameter("myAttachment");
String downFileName=myAttachment.substring(myAttachment.lastIndexOf("\\"));
System.out.println(downFileName);
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
System.out.println(e);
}
return downFileName;
}
public InputStream getTargetFile() throws Exception {
System.out.println("开始");
String myAttachment = (String)ServletActionContext.getRequest().getParameter("myAttachment");
System.out.println(myAttachment);
myAttachment=myAttachment.replace("\\", "/"); //将原路径中\ 换成 /
System.out.println(myAttachment);
InputStream resourceAsStream =new FileInputStream(myAttachment); //获得路径,如果不是在上下文中, 应该new FileInputStream(myAttachment);
System.out.println(resourceAsStream);
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.pb.action.MailAction">
<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>
<result name="input"></result>
<result name="null"></result>
</action>
</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>