一个简单的利用struts2做文件下载的demo……
首先配好struts:
web.xml
index.jsp struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*
struts.xml——这里是重点
result result result image/bmp,image/x-png,image/gif,image/jpeg 2M text/html text/html result application/octet-stream;charset=ISO8859-1 inputStream attachment;filename="${fileName}" 50000000
1) <param name="contentDisposition">attachment;fileName="${fileName}"</param>
contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择
2) attachment :下载时会打开下载框
3) fileName="${fileName}" :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字
4.<param name="inputName">downloadFile</param>,这个downloadFile名字要和FileDownload.java类中的getDownloadFile()方法名去掉get 一致
当result为stream类型时,struts2会自动根据你配置好的参数下载文件。
接着在DownloadAction里新建download方法,
package com.xhgjky.ssh.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport { private static final long serialVersionUID = 1L; private String fileName; public String getFileName() { return ServletActionContext.getRequest().getParameter("fileName"); } public void setFileName(String fileName) { try { fileName = new String(fileName.getBytes("iso-8859-1"), "utf-8"); //对接受的中文文件名进行转码,否则找不到文件所在的输出流 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("转码失败!!"); } this.fileName = fileName; } public InputStream getInputStream() { fileName = "哈.xls"; System.out.println(fileName); InputStream is=ServletActionContext.getServletContext().getResourceAsStream("/Html/upload/" + fileName); System.out.println("is:"+is); return is; } public String download(){ System.out.println("download.."); return SUCCESS; } }
* 注意使用getResourceAsStream方法时,文件路径必须是以“/”开头,且是相对路径。这个路径是相对于项目根目录的。 * 可以用return new FileInputStream(fileName)的方法来得到绝对路径的文件。 在WEB-INF下随意丢一个test.txt,部署好后进入浏览器,输入tomcat地址/项目路径/download.action?fileName=test.txt即可下载到该文件。