我们有一个运行我们报告的JasperReports Server(5.5.0社区版),并通过我们的Web应用程序中的REST服务API来使用它们。
当我们通过reports execution API询问报告输出时,我们得到了正确的输出,我们可以正确下载它,但问题是下载的文件是在没有扩展名的情况下下载的,因此最终用户可以'打开它(它必须重命名或选择适当的程序打开它)。根据我们能够弄清楚的原因,这有几个原因造成的:
首先,Jasper服务器上生成的输出没有设置名称,这是一个例子:
{
"status": "ready",
"totalPages": 1,
"currentPage": null,
"errorDescriptor": null,
"requestId": "338384569_1404312281871_3",
"reportURI": "/uri_to_report",
"exports": [
{
"status": "ready",
"errorDescriptor": null,
"outputResource": {
"contentType": "application/xls",
"fileName": null
},
"id": "xls"
}
]
}
正如我们所看到的,“fileName”属性为null,因此当我们询问输出时
<JASPER_SERVER_URL/jasperserver/rest_v2/reportExecutions/338384569_1404312281871_3/exports/xls/outputResource>
我们得到一个名为“outputResource”的文件,没有扩展名。这导致链接元素上的download属性无用,我们尝试了这个选项。我们无法找到在Jasper服务器内部设置此文件名的方法。
另一个原因是某些输出格式没有正确设置响应的MIME类型(我们尝试使用XLS,XLSX和DOCX格式)。我们可以看到,根据IANA或甚至是MICROSOFT,当应该是“application / vnd.ms-excel”并且浏览器无法使用正确的设置默认文件名时,将XLS输出设置为“application / xls”延期。为此,我们在嵌入式Tomcat中实现了一个Servlet过滤器,但似乎在我们为它设置正确的Content-Type标头之前刷新了响应。
我们将向Jasper社区报告这个可能的错误但是由于我们等待答案,我们一直在寻找这个问题的解决方法,那么,有什么建议吗?
先谢谢大家。