Struts2.0下载文件流
来源:互联网 发布:香港代购mac pro 编辑:程序博客网 时间:2024/05/21 06:35
引用:http://tailsherry.javaeye.com/blog/178351
在实际web应用中,大部分文件下载都是通过url文件链接直接下载的,同样在Struts中也可以这样实现。但是考虑到盗链,跨服务器访问等因素,直接文件流下载也是必要的。那么,在Struts2.0中如何实现数据流下载呢?
Struts2.0默认支持多种格式的result type,stream即是其中的一种。如果我这里要实现一个Generate Report的功能,将Report存放在一个InputStream里面,Action的示例代码内容如下:
- package com.test;
- import java.io.InputStream;
- import java.util.HashMap;
- import java.util.Map;
- public class ReportsAction extends ActionSupport {
- // 定义HTML类型的Report
- private static final int HTML_TYPE = 0;
- // 定义EXCEL类型的Report
- private static final int EXCEL_TYPE = 1;
- // Report类型
- private int reportType;
- // Report输出流
- public InputStream reportStream;
- // 输出流Content Type
- public String contentType;
- // 输出流的生成的文件名
- public String fileName;
- public ReportsAction() {
- }
- public String getContentType() {
- return contentType;
- }
- public String getFileName() {
- return fileName;
- }
- public InputStream getReportStream() {
- return reportStream;
- }
- public int getReportType() {
- return reportType;
- }
- public void setReportType(int reportType) {
- this.reportType = reportType;
- }
- public String generateReport() {
- switch (reportType) {
- case HTML_TYPE:
- // 获取HTML流
- reportStream = service.getHtmlStream();
- // contentType为MIME定义的,详细的内容可参考下面的这个网站:http://www.w3schools.com/media/media_mimeref.asp
- contentType = "text/html";
- // inline表示文件直接输出到网页上,不出现保存打开对话框
- fileName = "inline; filename=/"Report.htm/"";
- break;
- case EXCEL_TYPE:
- // 获取EXCEL流
- reportStream = service.getExcelStream();
- // contentType设定
- contentType = "application/vnd.ms-excel";
- // attachment表示网页会出现保存、打开对话框
- fileName = "attachment; filename=/"Report.xls/"";
- break;
- default:
- ;
- }
- return SUCCESS;
- }
- }
当然,Struts的配置也是非常重要的,如下:
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="root" namespace="/">
- <action name="generateReport" method="generateReport"
- class="com.test.ReportsAction">
- <result name="success" type="stream">
- <!-- 对应ReportsAction中的属性contentType -->
- <param name="contentType">${contentType}</param>
- <!-- ReportsAction中对应的InputStream的属性名 -->
- <param name="inputName">reportStream</param>
- <!-- 对应ReportsAction中的属性fileName,定义流输出格式 -->
- <param name="contentDisposition">${fileName}</param>
- <!-- 定义bufferSize,可选 -->
- <param name="bufferSize">1024</param>
- </result>
- ...
- </action>
- </package>
- </struts>
页面部分我就不详细写了,比如,可以在一个form的提交中绑定这个action,普通的网页调用代码如下:
- <form id="generateReportForm" action="generateReport.action" method="POST">
- </form>
当然,你也可以用一个Struts中的标签来实现,示例代码如下:
- <s:form theme="simple" validate="true">
- <s:submit cssStyle="width:160px" action="generateReport" value="Generate HTML Report" />
- <s:url id="generateUrl" action="generateReport"></s:url>
- <s:a href="%{generateUrl}"><s:textfield name="tail.button.generatexls" /></s:a>
- </s:form>
- Struts2.0下载文件流
- struts2.0文件下载
- struts2的文件下载(0):文件下载
- struts2 下载流 生成文件
- struts2.0中下载rar文件
- struts2.0上传和下载文件
- Ext+Struts2.0实现文件下载
- struts2实现文件下载
- struts2文件下载
- Struts2控制文件下载
- struts2文件下载
- Struts2 文件下载
- ext + struts2 下载文件
- Struts2文件下载
- Struts2文件下载
- struts2文件下载
- Struts2文件下载
- Struts2 的文件下载
- 深入理解iPhone静态库(手把手教你iphone开发 - 基础篇)
- 实现开机启动自己的AppWidget
- 如何优化人脸检测-我的一点经验
- 关于WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解
- 为什么要有兼容性测试:比web浏览器还恐怖的手机浏览器
- Struts2.0下载文件流
- 查询IP区段
- 转一篇官方的VIM教程
- 新年快乐
- 手机网站开发必修课【2009总结】
- Silverlight API的多源数据访问研究
- PHP货币转中文大写函数
- Objective-C内存管理与原理剖析(一)基本原理
- iPhone项目使用静态库的最佳方法