有上传,必有下载。struts同时也提供灵活性很高的下载功能。 本次主要介绍最基本的下载;由于时间关系,限制下载的次数以及一些安全问题下次再补充。
首先:最简单的下载,无非是给定一个超链接,用户点击之后弹出下载框进行下载;下载的文件名字有两种方法传入:
(1). <a href="user/down?[color=red]fileName[/color]=HrInterceptor.txt">点击下载</a> 红色部分便是对应传到action的属性;
(2). 采用依赖注入的属性,在配置文件struts.xml中动态指定该属性值
<action name="down" class="com.action.DownloadAction" >
[color=red] <param name="fileName">\upload\HrInterceptor.txt</param>[/color]
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">DownLoadFile</param>
<param name="contentDisposition">
attachment;filename="aa.txt"
</param>
</result>
</action>
红色部分是需要添加的内容,注意是在<param>是和<result>同一个级别下的。
二者选其一后,在action定义变量fileName,并写get set方法。
其次:细心的朋友会发现struts.xml的<result>的type属性为"stream";表示用流 的形式返回给用户下载;
<param name="contentType">text/plain</param> 表示限制下载文件参数为*.txt文件;
<param name="contentDisposition">
attachment;filename="aa.txt"
</param> attachment; 表示弹出下载对话框,filename="aa.txt" 则表示下载文件的默认名称;
接着: 可能你在自己做的过程中会遇到这个异常[color=green]"Can not find a java.io.InputStream with the name"[/color] 表示找不到该路径下文件; 可能涉及到的原因如下:
(1).缺少<param name="inputName">DownLoadFile</param>,这句话表示指定由action类的getDownLoadFile()方法返回被下载文件的流
(2).action类里缺少getDownLoadFile()方法
(3).路径出错,请细查自己的文件路径
若用到绝对路径,本人demo的代码是:
public InputStream getDownLoadFile()throws Exception {
return new FileInputStream("f:\\oracle.txt");
}
若是相对路径,代码则为:
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getDownLoadFile()throws Exception {
String realPath="/upload/"+fileName;
System.out.println(realPath);
InputStream in=ServletActionContext.getServletContext ().getResourceAsStream(realPath);
return in;
}
基本功能已经实现,初学的童鞋们可参考。由于时间关系,比较强大的下载功能就下次再写出来吧!
首先:最简单的下载,无非是给定一个超链接,用户点击之后弹出下载框进行下载;下载的文件名字有两种方法传入:
(1). <a href="user/down?[color=red]fileName[/color]=HrInterceptor.txt">点击下载</a> 红色部分便是对应传到action的属性;
(2). 采用依赖注入的属性,在配置文件struts.xml中动态指定该属性值
<action name="down" class="com.action.DownloadAction" >
[color=red] <param name="fileName">\upload\HrInterceptor.txt</param>[/color]
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">DownLoadFile</param>
<param name="contentDisposition">
attachment;filename="aa.txt"
</param>
</result>
</action>
红色部分是需要添加的内容,注意是在<param>是和<result>同一个级别下的。
二者选其一后,在action定义变量fileName,并写get set方法。
其次:细心的朋友会发现struts.xml的<result>的type属性为"stream";表示用流 的形式返回给用户下载;
<param name="contentType">text/plain</param> 表示限制下载文件参数为*.txt文件;
<param name="contentDisposition">
attachment;filename="aa.txt"
</param> attachment; 表示弹出下载对话框,filename="aa.txt" 则表示下载文件的默认名称;
接着: 可能你在自己做的过程中会遇到这个异常[color=green]"Can not find a java.io.InputStream with the name"[/color] 表示找不到该路径下文件; 可能涉及到的原因如下:
(1).缺少<param name="inputName">DownLoadFile</param>,这句话表示指定由action类的getDownLoadFile()方法返回被下载文件的流
(2).action类里缺少getDownLoadFile()方法
(3).路径出错,请细查自己的文件路径
若用到绝对路径,本人demo的代码是:
public InputStream getDownLoadFile()throws Exception {
return new FileInputStream("f:\\oracle.txt");
}
若是相对路径,代码则为:
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getDownLoadFile()throws Exception {
String realPath="/upload/"+fileName;
System.out.println(realPath);
InputStream in=ServletActionContext.getServletContext ().getResourceAsStream(realPath);
return in;
}
基本功能已经实现,初学的童鞋们可参考。由于时间关系,比较强大的下载功能就下次再写出来吧!