Struts2用action方式实现文件下载

12 篇文章 0 订阅

Action类:

@SuppressWarnings("serial")
public class DownFileAction extends ActionSupport {
	// 依赖注入的属性,struts.xml中动态的指定
	private String inputPath;

	// 只需要set方法
	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}

	/**
	 * 配置stream类型结果时,需指定inputName;inputName为方法名去掉get前缀,并且首字母小写的字符串;
	 * 比如此例中的inputName为 targetFile
	 * 
	 * @return
	 */
	public InputStream getTargetFile() throws Exception {
		return ServletActionContext.getServletContext().getResourceAsStream(inputPath);  //该方法适用于相对路径,相对项目根目录webroot
                //String realPath = inputPath;
                //File file = new File(realPath);
                //return new FileInputStream(file);	//该方法适用于获取本地绝对路径的文件,inputPath为绝对路径,格式类似 D:\\iosh\\log\\run.log
        }
}

Struts配置文件:

<action name="openCJoinFile" class="com.haiyi.action.DownFileAction">
	    <!-- 指定被下载资源的位置 -->  
            <param name="inputPath">CJoin-记事本.txt</param>  
            <!-- 配置结果类型为stream的结果 -->  
            <result name="success" type="stream">  
                <!-- 指定下载文件的文件类型 -->  
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>  
                <!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->  
                <param name="inputName">targetFile</param>
                <!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,默认为直接显示文件 -->
                <param name="contentDisposition">attachment;filename="CJoin.txt"</param>  
                <!-- 指定下载文件的缓冲大小 -->  
                <param name="bufferSize">4096</param>  
            </result>
</action>
JSP:

<a href="<%=basePath%>openCJoinFile.action" target="_self">主日志</a>

ContentType文件类型:

序号

内容类型

文件扩展名

描述

1

application/msword

doc

Microsoft Word

2

application/octet-stream bin

dms lha lzh exe class

可执行程序

3

application/pdf

pdf

Adobe Acrobat

4

application/postscript

ai eps ps

PostScript

5

appication/powerpoint

ppt

Microsoft Powerpoint

6

appication/rtf

rtf

rtf 格式

7

appication/x-compress

z

unix 压缩文件

8

application/x-gzip

gz

gzip

9

application/x-gtar

gtar

tar 文档 (gnu 格式 )

10

application/x-shockwave-flash

swf

MacroMedia Flash

11

application/x-tar

tar

tar(4.3BSD)

12

application/zip

zip

winzip

13

audio/basic

au snd

sun/next 声音文件

14

audio/mpeg

mpeg mp2

Mpeg 声音文件

15

audio/x-aiff

mid midi rmf

Midi 格式

16

audio/x-pn-realaudio

ram ra

Real Audio 声音

17

audio/x-pn-realaudio-plugin

rpm

Real Audio 插件

18

audio/x-wav

wav

Microsoft Windows 声音

19

image/cgm

cgm

计算机图形元文件

20

image/gif

gif

COMPUSERVE GIF 图像

21

image/jpeg

jpeg jpg jpe

JPEG 图像

22

image/png

png

PNG 图像

text/html HTML 

text/plain          TXT 

text/xml             XML

text/json           json字符串



如果路径要从例如 log4j.properties 文件路获取,需要对上面代码做一点修改:

public InputStream getSysLog() throws Exception {
		InputStream ins = DownFileAction.class.getResourceAsStream("../../../log4j.properties");    //获取log4j.properties文件
		Properties p = new Properties();
		try{
			p.load(ins);   //加载
		}catch(Exception e){
			e.printStackTrace();
		}
		String realPath = p.getProperty("log4j.appender.sysLog.File");   //通过key获取value值
		System.out.println(realPath);
		File file = new File(realPath);
		return new FileInputStream(file);
	}
同时,把 struts.xml 中的 inputPath 那行删掉,无需配置路径


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值