基於Struts2的Excel的下載,需要注意的問題比較多的,現在總結一下。
1、在struts.xml中需要配置下載設置
2、如果需要前端彈出下載框,則不能使用ajax提交,需要用form表單提交
3、 可用流返回
struts.xml
<result name="down" type="stream">
<!-- 下載文件的類型,如果你不知道是什麼格式,可以去 tomcat\conf\web.xml下找 -->
<param name="contentType">application/vnd.ms-excel</param>
<!-- 返回流 excelStream爲action中的流變量名稱 -->
<param name="inputName">excelStream</param>
<!-- attachment可以設置成下載時,是否出現個下載提示框,或者直接下載之類的。fileName指定生成的文件名字爲action中變量-->
<param name="contentDisposition">
attachment;filename=${excelFileName}
</param>
<param name="bufferSize">1024</param>
</result>
ExportExcelAction.java
private InputStream excelStream; //輸出流變量
private String excelFileName; //下載文件名
public InputStream getExcelStream() {
return excelStream;
}
public void setExcelStream(InputStream excelStream) {
this.excelStream = excelStream;
}
public String getExcelFileName() {
return excelFileName;
}
public void setExcelFileName(String excelFileName) {
this.excelFileName = excelFileName;
}
public String exportExcel() throws IOException{
//創建一個HSSFWorkbook,對應一個Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
...
//將文件存到流中
ByteArrayOutputStream os = new ByteArrayOutputStream();
wb.write(os);
byte[] fileContent = os.toByteArray();
ByteArrayInputStream is = new ByteArrayInputStream(fileContent);
excelStream = is; //文件流
excelFileName = System.currentTimeMillis()+".xls"; //設置下載的文件名
return "down";
}