###struts2 完成文件下载:
1.首先明确基础知识:InputStream与FileInputStream等都是对内存而言,
那么文件输入流一定是向内存输入流,这对文件下载是有用的。
本质理解下载文件过程:
第一步:就是要下载的文件放到或叫关联到输入流中: 把文件干到内存
new FileInputStream("d:\\test.txt")
第二步:把输入流转换成输出流,即data从内存干到文件当中去,由此完成了文件下载功能。
YE的IP抓包下载Excel原理 就是利用这种输出流的方式:
InputStream in=new FileInputStream(temp);
outStream(in);
temp.delete();
第三步:再配合以下对浏览器的控制:
getResponse().setContentType("application/vnd.ms-excel; charset=GBK");
String fileName=buildTitle()+".xls";
getResponse().setHeader("Content-disposition","attachment; filename="+new String(fileName.getBytes("GB2312"),"ISO-8859-1"));
这就是文件下载的整个原理。
2.struts2下载文件的套路: 框架确实简单-->依然用xml的配置方式,代替了繁琐的硬编码方式。
第一步:在action当中加一个:
public InputStream getInputStream() throws Exception {
return new FileInputStream("d:\\test.txt");
}
第二步:struts.xml中添加配置:
<action name="TopExportTxt" class="cn.cstnet.trafficView.action.flow.CatchIPTopAction" >
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="struts2down.txt"</param>
<param name="bufferSize">4096</param>
</result>
</action>
以上两步就完全搞定,非常犀利,具体用时再修改下达到业务需求即可。