最近项目中用到,所以研究了下
感谢此文:
http://blog.csdn.net/Arthur0088/archive/2010/06/01/5639316.aspx
现在贴出代码
注意看这个annotation写的action,不是在struts.xml中配的
这样写方便维护
/**
* 下载action
* @return
*/
@Action(value = "downloadlucky",
results = {
@Result(name = Constants.SUCCESS, type="stream" //, location="/website/lucky.jsp"因为有stream出来,所以定向到location会"断流",这里可以不写
,params = {"contentType", "application/msexcel"
, "contentDisposition", "attachment;filename=${filename}" // attachment表示以附件形式打开,inline表示在浏览器中打开,filename为保存时的名字
, "bufferSize", "10240" //缓存
, "inputName", "inputStream"//对应上面的public InputStream getInputStream() 方法
}
)
}
)
public String downloadlucky() {
try{
log.info("begin method:downloadlucky()");
fullPathName = "/WEB-INF/aa.xls";
filename = "我爱你.xls";
//使中文文件名不出现乱码
filename = new String(filename.getBytes(),"iso8859-1");
log.info("end method:downloadlucky()");
return SUCCESS;
}catch (DataAccessException ex) {
log.info("end method:downloadlucky()");
log.error("", ex);
throw ex;
} catch (BusinessAccessException ex) {
log.info("end method:downloadlucky()");
log.error("", ex);
throw ex;
} catch (Exception ex) {
log.info("end method:downloadlucky()");
log.error("", ex);
throw new ActionAccessException();
} catch (Throwable ex) {
log.info("end method:downloadlucky()");
log.error("", ex);
throw new ActionAccessException();
}
}
必须有一个方法,返回InputStream
//返回一个InputStream类型值
public InputStream getInputStream() throws Exception {
System.out.println(fullPathName);
InputStream is = ServletActionContext.getServletContext().getResourceAsStream (fullPathName);
return is;
}
fullPathName,filename 都需要get(),set()下
//文件路径
private String fullPathName;
//下载时的默认名字
private String filename;
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getFullPathName() {
return fullPathName;
}
public void setFullPathName(String fullPathName) {
this.fullPathName = fullPathName;
}
action的 params中的 "inputName", "inputStream" 指的是inputName对应getInputStream方法,当然,如果inputStream改成downloadStream ,那么对应的方法也改为public InputStream getDownloadStream()
目前这段代码没有放,不过也贴出来看下
/*
* 获取目标文件在服务器中保存的目录。若不在这个目录则拒绝下载,否则,
* 稍微精通struts2的人可能试图获取WEB-INF下的文件,那就不安全了。
*/
String downloadDir = ServletActionContext.getServletContext()
.getRealPath("/upload");
// 获取目标文件的绝对路径
String downloadFile = ServletActionContext.getServletContext()
.getRealPath(inputPath);
/*
* 防止企图下载不在目录downloadDir下的文件,以保障安全。若不在这个目
* 录则拒绝下载,否则,稍微精通struts2的人可能试图获取WEB-INF下 的文件,那就不安全了。
*/
if (!downloadFile.startsWith(downloadDir)) {
return null;
}
OK,记录到此结束。
分享到:
相关推荐
在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...
本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...
这个“Struts2接口文档”是开发者的重要参考资料,提供了关于Struts2框架内各个组件、类库以及接口的详细说明,帮助开发者深入理解框架的内部工作原理并有效地使用其功能。 Struts2的核心组件包括Action、Result、...
struts2官方文档
struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2中用Spring实现IOC struts2中的零配置与IOC struts2介绍之使用连接...
这个API帮助文档是开发者在使用Struts2框架时的重要参考资料,它详细阐述了框架的各种组件、类库和方法,有助于理解并有效利用Struts2的功能。 1. **Struts2核心组件** - `struts2-core`:这是Struts2框架的核心...
4. **结果类型(Result Types)**:Struts2支持多种结果类型,如`dispatcher`(默认,将结果转发到JSP页面)、`stream`(用于文件下载)、`redirect`(重定向URL)等,可以根据不同的需求选择合适的结果类型。...
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
在下载并解压"struts2所有jar包"后,开发者需要将lib目录下的所有jar文件添加到项目构建路径中,确保运行时可以找到所有依赖。对于Maven或Gradle用户,可以通过在pom.xml或build.gradle文件中指定相应的依赖项,实现...
在Struts中实现文件下载是一项常见的功能,尤其在处理用户请求获取服务器上的静态或动态资源时。这篇博文将深入探讨如何在Struts框架下实现文件下载的功能。 首先,我们需要了解文件下载的基本原理。当用户点击下载...
网上很多有关struts2的api文档都是不全的。我经过精心整理出的struts2api文档,非常齐全。
在Struts2中处理文件下载是常见的需求,比如用户请求下载服务器上的文件,如PDF、图片或其他类型的文档。本案例"Struts2之struts012"将深入探讨如何在Struts2中实现文件下载的功能。 首先,我们需要创建一个Action...
在我们做struts2文件下载的时候,经常会遇到这种问题:点“打开/保存”一切正常,但当我们点击“取消”时,却报一堆的异常(其中包括ClientAbortException异常),非常让人头疼,如何彻底解决呢?附件中使用struts2-...
"Struts2.0中文教程.chm"文件很可能是官方文档的中文版,它将涵盖Struts2的基础概念、配置、控制器、模型、视图、拦截器、异常处理、国际化、测试等方面的内容。这份文档将帮助初学者快速上手,同时也为有经验的...
"struts2 jar"文件包含了Struts2框架的核心库,可能包括struts2-core、struts2-convention、struts2-json-plugin等依赖,这些是开发Struts2应用必不可少的组件。 "Struts2"可能是项目实例代码,包括Action类、视图...
通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...