服务端action代码
public String downloadReport() { try { String path = new String(filePath.getBytes("ISO-8859-1"),"utf-8");//处理get请求传过来的中文参数乱码,filePath文件路径需要set方法接收页面参数 System.out.println(path); //输入流(相对于浏览器是输入流,服务器是输出流) inputStream=ServletActionContext.getServletContext().getResourceAsStream(path); fileName=new String("检测报告.pdf".getBytes(), "ISO8859-1");//文件名包含中文需编码 } catch (UnsupportedEncodingException e) { e.printStackTrace(); return ERROR; } return SUCCESS; }
struts配置文件
<action name="downloadReport" class="orderAction" method="downloadReport" > <result name="success" type="stream"> <param name="contentType">application/octet-stream;charset=UTF-8</param> <param name="contentDisposition">attachment;filename=${fileName}</param> <!-- filename 指定下载文 件保存时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名,这里使用的是动态文件名,${fileName}--> <param name="bufferSize">4096</param> <!-- 输出时缓冲区的大小--> <param name="inputName">inputStream</param> <!-- 根据文件项目路径得到的输入流,需要提供get方法 --> </result> </action>
结果类型必须要写成 type="stream" ,与之对应的处理类是 org.apache.struts2.dispatcher.StreamResult
) <param name="contentDisposition">attachment;fileName="${fileName}"</param>
contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择
2) attachment :下载时会打开下载框
3) fileName="${fileName}" :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字
参考文章:
http://blog.csdn.net/xiazdong/article/details/7231977
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1680584