首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy/Grails文档下载

Groovy/Grails文档下载
EN

Stack Overflow用户
提问于 2016-03-22 13:57:23
回答 1查看 1.2K关注 0票数 0

我目前正在使用grails开发一个web应用程序。其中一个要求是生成excel时间表并在事后下载它。这是我从grails控制器下载的代码。

代码语言:javascript
复制
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Disposition","attachment;filename=name.xls")
response.outputStream << wb.bytes
response.outputStream.flush()

但我的excel文件被破坏了。我可以使用开放的office打开它,但是使用microsoft office或google驱动器不起作用。看起来xls文件的内容没有很好的格式化。如果我保存文档而不是下载所有东西都可以。

代码语言:javascript
复制
 FileOutputStream fileOut = new FileOutputStream("name.xls")
 wb.write(fileOut)
 fileOut.close()

当以字节数组的形式下载时,我不知道为什么文件内容被破坏了。

Grails版本- 2.3.7 Apache poi版本- 3.13

提前谢谢你,

方法码

代码语言:javascript
复制
   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()
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 14:56:42

有几件事你应该做:

首先,设置内容长度:response.setHeader("Content-Length", "${wb.bytes.length}")

其次,关闭输出:response.outputStream.close()

最后,确保您的return null确保Grails不尝试呈现视图。

代码语言:javascript
复制
   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-Length", "${wb.bytes.length}")
    response.setHeader("Content-Disposition", "attachment;filename=${timeSheet.proposedFileName}")
    response.outputStream << wb.bytes
    response.outputStream.flush()
    response.outputStream.close()
    return null
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36156391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档