发布在服务器上部署时导出到PPTX的下载报告

时间:2014-10-17 05:19:02

标签: java jasper-reports powerpoint

我们使用JasperReports 5.6.1生成报告,并允许将相同的模板导出为PDF或Powerpoint。在本地运行时,下载的PDF和PPTX文件可以正常运行。当我们部署到我们的服务器时,PDF工作正常,但无法打开PPTX文件。当我们在本地运行时,它被部署到tomcat,但当部署到服务器时,它在Websphere上运行。

我尝试并注意到的事情:

  • 我检查了日志,并没有任何例外或任何引起任何挑剔的事情。
  • 下载的文件通常比我们在本地运行时获得的文件略大。
  • 如果我将文件的扩展名更改为zip,并将其取消归档。文件结构和文件名是相同的,文件实际上是相同的文件大小。内容似乎只在每张幻灯片中找到的对象的名称中有所不同。
  • 认为我尝试导出到xlsx的x类型文件可能存在问题,只是为了看看会发生什么,并且它可以使用相同的模板。
  • 我添加了一个已知良好的静态pptx文件,可以从服务器上下载它而不会出现问题。我这样做是为了尝试从问题中消除服务器配置,并感觉它有效,我假设它是我的代码,只是不确定是什么。

以下是我们编写回复的代码:

if ("xlsx".equals(type)) {
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".xlsx");
} else if ("pptx".equals(type)) {
    response.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pptx");
    response.setCharacterEncoding("UTF-8");
} else {
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pdf");
}
try (final ByteArrayOutputStream reportResult = reportsService.generateReport(
        getDeal(userId, dealId, sessionStore),
        getScenarioModel(userId, dealId, scenarioId, sessionStore), reportId, type)) {
    configureResponse(response, type, reportResult, dealId + "-" + scenarioId);
    // Write to http response
    reportResult.writeTo(response.getOutputStream());
}

response.flushBuffer();

我已经没有关于故障排除步骤的想法,并且无法在本地重现,我发现很难诊断。

1 个答案:

答案 0 :(得分:3)

在黑暗中这是一个镜头,但你确定在WebSphere实例中正确配置了mime类型吗? (我意识到在响应中设置内容类型应该避免为该MIME类型配置Web服务器的要求,但它毕竟是WebSphere; - ))

我愿意打赌PDF是已配置的MIME类型,但PPTX不是。你能检查一下吗?

  1. 登录WAS管理控制台
  2. 转到虚拟主机
  3. 点击名为MIME types
  4. 的链接

    here's a more detailed technote

    IIRC,与Tomcat不同,它是(由于缺乏一个更好的术语)类型的“捆绑”一体化http堆栈和servlet容器,WebSphere有一个单独的http堆栈(以及每个应用程序的单独JVM)因此,在那里可能需要配置而不是更简单的容器也就不足为奇了。