1. struts2配置文件:
testStream application/octet-stream;charset=GBK attachment;filename="${fileName}" 4096
说明:
result标签中需要定义 type=”stream” 。
在Action中只需要定义 testStream 的get方法即可,即getTestStream(),不需要定义private InputStream testStream这样的类私有变量。
2.Action中:
@Controller("downloadAction")@Scope("prototype")public class DataDownloadAction extends ActionSupport { //用户存储下载时显示的文件名 private String fileName; public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public InputStream getTestStream() throws Exception { String filename = "中文书名测试.pdf"; String filepath = "E:\\book\\"+filename; File file = new File(filepath); InputStream inStream = null; inStream = new FileInputStream(file); //需要转换才可以显示中文文件名 this.fileName = new String(filename.getBytes(), "ISO8859-1"); return inStream; }}
说明:
如果文件名为中文,需要在给fileName定义时进行字符集转换:this.fileName = new String(filename.getBytes(), “ISO8859-1”);
此外,tomcat的字符集需要设置为UTF-8,具体方法为编辑conf/server.xml中添加URIEncoding=”UTF-8”