文件下载是一个很常见的功能,用struts2实现文件下载的步骤:
一)定义一个Action类,FileDownload.java
- package com.struts2.filedownload;
- import java.io.InputStream;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- //文件下载 public class FileDownload extends ActionSupport{
- private int number ;
- private String fileName;
- public int getNumber() {
- return number; }
- public void setNumber(int number) {
- this.number = number; }
- public String getFileName() {
- return fileName; }
- public void setFileName(String fileName) {
- this.fileName = fileName; }
- //返回一个输入流,作为一个客户端来说是一个输入流,但对于服务器端是一个 输出流
- public InputStream getDownloadFile() throws Exception {
- if(1 == number) {
- this.fileName = Dream.jpg ; //获取资源路径
- return ServletActionContext.getServletContext().getResourceAsStream(upload/Dream.jpg) ; }
- else if(2 == number)
- { this.fileName = jd2chm源码生成chm格式文档.rar ;
- //解解乱码 this.fileName = new String(this.fileName.getBytes(GBK),ISO-8859-1);
- return ServletActionContext.getServletContext().getResourceAsStream(upload/jd2chm源码生成chm格式文档.rar) ; }
- else return null ;
- }
- @Override public String execute() throws Exception {
- return SUCCESS;
- }
- }
package com.struts2.filedownload; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; //文件下载 public class FileDownload extends ActionSupport{ private int number ; private String fileName; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } //返回一个输入流,作为一个客户端来说是一个输入流,但对于服务器端是一个 输出流 public InputStream getDownloadFile() throws Exception { if(1 == number) { this.fileName = Dream.jpg ; //获取资源路径 return ServletActionContext.getServletContext().getResourceAsStream(upload/Dream.jpg) ; } else if(2 == number) { this.fileName = jd2chm源码生成chm格式文档.rar ; //解解乱码 this.fileName = new String(this.fileName.getBytes(GBK),ISO-8859-1); return ServletActionContext.getServletContext().getResourceAsStream(upload/jd2chm源码生成chm格式文档.rar) ; } else return null ; } @Override public String execute() throws Exception { return SUCCESS; } }
二)在struts.xml文件中配置相关信息-
-
- text/plainattachment;fileName=${fileName}
- downloadFile1024
-
text/plain attachment;fileName=${fileName} downloadFile 1024
1.结果类型必须要写成 type=stream ,与之对应的处理类是 org.apache.struts2.dispatcher.StreamResult
2.涉及到的参数:

3.
1)attachment;fileName=${fileName}
contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择
2) attachment :下载时会打开下载框
3) fileName=${fileName} :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字
4.downloadFile,这个downloadFile名字要和FileDownload.java类中的getDownloadFile()方法名去掉get 一致
三)用于显示下载的链接界面 filedownload.jsp
-