我目前正在使用grails開發一個web應用程序。其中一個要求是生成Excel時間表並將其下載。 這是我從grails控制器下載的代碼。Groovy/Grails文檔下載
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Disposition","attachment;filename=name.xls")
response.outputStream << wb.bytes
response.outputStream.flush()
但我的excel文件已損壞。我可以使用開放式辦公室打開它,但無法使用Microsoft Office或Google Drive。看起來xls文件的內容格式不正確。 如果我保存文檔而不是下載,一切正常。
FileOutputStream fileOut = new FileOutputStream("name.xls")
wb.write(fileOut)
fileOut.close()
我無法弄清楚爲什麼文件內容在以字節數組下載時被破壞。
Grails的版本 - 2.3.7 的Apache POI版本 - 提前3.13
感謝,
法碼
def generate(){
TimeSheetExportWrapper timeSheet = new TimeSheetExportWrapper()
bindData(timeSheet, params.ts)
HSSFWorkbook wb = excelExportService.createExcelTimeSheet(getCurrentTenant(), timeSheet, getCurrentTimezone())
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Disposition", "attachment;filename=${timeSheet.proposedFileName}")
response.outputStream << wb.bytes
response.outputStream.flush()
}
發佈您的整個控制器方法。這可能是你發佈之前/之後的事情。 –
http://stackoverflow.com/questions/15387243/apache-poi-working-with-xssfworkbok-servlet-response我有它使用這種方法工作 – Vahid
有幾件事你應該做的。 1.將內容長度添加到標題中,2.關閉流後關閉outputStream'response.outputStream.close()'和3.'return null',以便Grails不嘗試並呈現任何視圖。 –