struts的文件下载
程序员文章站
2022-05-30 22:12:11
...
①、先写一个展示文件的action(里面有收集文件的数组和获取文件的方法)
public class TeatAction extends ActionSupport{
public File[] getFs() {
return fs;
}
public void setFs(File[] fs) {
this.fs = fs;
}
//用来装获取到的文件
private File[] fs;
public String list(){
//取得文件保存路径
String path=ServletActionContext.getRequest().getRealPath("\\image");
File f=new File(path);
//获取目录下保存的文件
fs=f.listFiles();
return "list";
}
}
②、下载文件的action(里面必须有一个文件名字的属性和一个获取字节输入流的方法)
public class DownloadAction extends ActionSupport{
//自动获得字节输入流(get、set方法不能少)
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
private String fileName;
public void setFileName(String fileName) throws UnsupportedEncodingException {
//处理get请求中文乱码
this.fileName = new String(fileName.getBytes("iso8859-1"),"utf-8");
}
public String getFileName() {
return fileName;
}
public InputStream getDownloadFile() throws Exception{
//第一种方法,返回缓存字节输入流
//InputStream is = new BufferedInputStream(inputStream);
//return is;
//第二种方法,返回缓存字节输入流
return new BufferedInputStream(ServletActionContext.getServletContext().getResourceAsStream("/image/" + fileName));
}
}
③、struts的配置
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="testAction_*" class="com.xb.action.TeatAction" method="{1}">
<result name="list">Load.jsp</result>
</action>
<!-- 这个action不需要写执行方法 -->
<action name="download" class="com.xb.action.DownloadAction">
<result type="stream">
<!-- 下载的文件数据存放的方法,该方法返回一个InputStream
例如取值为inputStream的属性需要编写getInputStream()方法-->
<param name="inputName">downloadFile</param>
<!--下载时,客户端显示的下载的文件名 -->
<param name="contentDisposition"> attachment; filename=${fileName}</param>
<!-- 数据的缓冲大小 -->
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
④、页面展示(jsp展示页面)
<s:iterator begin="0" end="fs.length-1" id="num">
<s:property value="fs[#num].getName()"/>
<a href="download.action?fileName=<s:property value="fs[#num].getName()"/>">下载</a>
<br>
</s:iterator>
这样就可以实现文件的下载了....
上一篇: 自定义流式布局FlowLayout
下一篇: 自定义流式布局FlowLayout