服务端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">p_w_upload;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">p_w_upload;fileName="${fileName}"</param>
contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择
2) p_w_upload :下载时会打开下载框
3) fileName="${fileName}" :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字
参考文章:
http://blog.csdn.net/xiazdong/article/details/7231977
转载于:https://blog.51cto.com/tianxingzhe/1680584