下载相对上传来说就要简单一点了,主要是使客户端获得服务器端的文件输入流,但是在配置Action时,还是有一些要注意的:
1)result的type必须为stream类型
2)attachment表示不管什么类型的文件,都要弹出下载对话框,若不指定,则默认为内联形式,即inline,即浏览器能打开的就直接打开,不能打开的就提示保存。
3)filename指定的是在保存对话框中,显示的文件的名称,这里并不能决定用户要下载的哪个文件,仅仅是起一个显示的作用
4)inputName指定的是Action中获得InputStream的方法名
下面看一个示例:
<body>
<a href="/struts2/test1/filedownload">下载文件</a>
</body>
package com.suo.actions;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoadAction extends ActionSupport {
public InputStream getDownloadFile()
{
return ServletActionContext.getServletContext().getResourceAsStream("/upload/piao.txt");
//这里是获得一个服务器端文件的输入流,相对于客户端来说。
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
<action name="filedownload" class="com.suo.actions.DownLoadAction">
<result name="success" type="stream">
<param name="contentDisposition">attachment;filename="piao.txt"</param>
<param name="inputName">downloadFile</param>
</result>
</action>