struct2实现文件下载

1、struts.xml配置
<!-- 下载文件配置 -->
<!--type 为 stream 应用 StreamResult 处理-->
<result name="csvExport" type="stream">
<!--
不管实际类型,待下载文件 ContentType 统一指定为 application/octet-stream 
默认为 text/plain
-->
<param name="contentType">application/octet-stream</param>
<!-- 
默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,
比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 
-->  
<param name="inputName">inputStream</param>
<!-- 
默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 指定下载文 
件保有存时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名,
这里使用的是动态文件名,${fileName}, 它将通过 Action 的 getFileName() 获得文件名 
-->  
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<!-- 输出时缓冲区的大小 -->
<param name="bufferSize">4096</param>
</result>


二、action方法定义
        //Action调用的下载文件方法
        
public String csvExport() {
                
return "csvExport";
        
}
        
        
//获得下载文件的内容,可以直接读入一个物理文件或从数据库中获取内容
        
public InputStream getInputStream() throws Exception {
                
String dir = servletContext.getRealPath("/file/upload");
                
File file = new File(dir, "icon.png");
                
if (file.exists()) {
                        
//下载文件
                        
return new FileInputStream(file);
                        
                        
//和 Servlet 中不一样,这里我们不需对输出的中文转码为 ISO8859-1
                        
//将内容(Struts2 文件下载测试)直接写入文件,下载的文件名必须是文本(txt)类型
                        
//return new ByteArrayInputStream("Struts2 文件下载测试".getBytes());
                
}
                
return null;
        
}

        
// 对于配置中的 ${fileName}, 获得下载保存时的文件名
        
public String getFileName() {
                
String fileName ="图标.png";
                
try {
                        
// 中文文件名也是需要转码为 ISO8859-1,否则乱码
                        
return new String(fileName.getBytes(), "ISO8859-1");
                
} catch (UnsupportedEncodingException e) {
                        
return "icon.png";
                
}
        
}
三、jsp<a href="javascript:submitForm(1);">数据导出</a>        function submitForm(actionType)         {         if (0 == actionType)           {        viewForm.action = 'dynamicReport_viewSelect.action';        }      else           {        viewForm.action = 'dynamicReport_csvExport.action';         }      viewForm.submit();        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值