struts2的文件下载是真实的下载,是下载到内存中的
jsp页面:
<p>文件下载</p>
<s:iterator value="#request.files" var="fs">
<!-- fname:是文件或者图片的路径-->
<a href="loadAction.action?fname=<s:property value='#fs.getName()'/>"><s:property value="#fs.getName()"/></a><br/>
</s:iterator>
文件下载的方法中:
package com.ystruts.action;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoadAction extends ActionSupport{
//名字要和页面上的name一致
private String fname;
//这个名字是自定义的
private InputStream inputStream;
//方法
public InputStream getDownLoad() {
//获取request对象
HttpServletRequest request=ServletActionContext.getRequest();
@SuppressWarnings("deprecation")
//通过request对象获取到绝对路径
String path=request.getRealPath("/images");
BufferedInputStream bis=null;
try {
//通过文件名称和文件路径创建字节输入流
bis=new BufferedInputStream(new FileInputStream(path+"/"+fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//返回字节输入流
return bis;
}
}
配置文件中:
<action name="loadAction" class="com.ystruts.action.LoadAction" >
<!-- 指明type是文件下载-->
<result type="stream">
<param name="inputName">downLoad</param><!-- 方法名 -->
<!-- 下载文件的类型-->
<param name="contentType">application/octet-stream</param>
<!-- 下载文件的打开方式 如果attachment;不写那不会下载图片,只会显示图片-->
<param name="contentDisposition">attachment;fname=${fname}</param><!-- fname属性-->
</result>
</action>