一、新建down.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<a href="down?fileid=1">点击下载1</a><br/>
<a href="down?fileid=2">点击下载2</a>
</body>
</html>
配置struts-demo.xml文件(接十一步骤在struts.xml内导入struts-demo.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="demo" namespace="" extends="base">
<action name="down" class="action.DownAction" >
<result name="ok" type="stream">
<!--有输出中文的时使用 param name="contentType">application/octet-stream;charset=utf-8</param -->
<param name="contentType">application/x-msdownload</param>
<param name="inputName">tagFile</param>
<param name="contentDisposition">filename=${filename}</param>
</result>
</action>
</package>
</struts>
三、编写action,新建DownAction.java文件
package action;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
public class DownAction {
private int fileid;//接收需要下载的文件ID参数
private InputStream tagFile;//目标文件对象
private String filename;//文件名
public int getFileid() {
return fileid;
}
public void setFileid(int fileid) {
this.fileid = fileid;
}
public InputStream getTagFile() {
//首先根据文件ID到数据到查询到文件对象,获取到文件的真实文件名称
if(fileid==1){
filename="a.zip";
}else{
filename="a.jpg";
}
//获取下载文件所在文件夹物理路径
String path=ServletActionContext.getServletContext().getRealPath("/upload/"+filename);
System.out.println("下载的文件路:"+path);
//创建文件输入流对象
try {
tagFile=new FileInputStream(path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return tagFile;
}
public void setTagFile(InputStream tagFile) {
this.tagFile = tagFile;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String execute(){
return "ok";
}
}
demo文件结构如下:
注:struts-demo.xml参数注解
–contentType:发送给Web浏览器的数据流的MIME类型(默认是text/plain),即下载文件内容类型
–contentDisposition:用于控制文件下载的一些信息,可选择的设置包括:inline;filename=“下载文件名(action中的filename)”和attachment;filename=“下载文件名”,filename指定下载的文件名。Inline表示下载文件在本页面内部打开,attachement表示弹出”文件下载”对话框。不过,这也不是绝对的,对于浏览器能够显示的下载文件是这样的,对于浏览器不支持的下载类型,即使使用inline选项,仍然会弹出”文件下载”对话框。 contentDisposition的默认值是inline.
完成!