我正在开发一个创建报告的应用程序并将其发送给客户端。我使用了以下内容:XDocReport,Grails。
这是我的代码:
def OutputStream outputStream = response.getOutputStream();
try {
def InputStream inn = new FileInputStream(new File(invoiceExporterService.getTemplatePath(templateName)));
def IXDocReport report = XDocReportRegistry.getRegistry().loadReport(inn, TemplateEngineKind.Freemarker);
def FieldsMetadata metadata = report.createFieldsMetadata();
metadata.load("invoiceDetails", CustomerInvoiceDetail.class, true);
IContext context = report.createContext();
context = invoiceExporterService.prepareDataForExport(context, id);
report.process(context, outputStream);
} catch (IOException io) {
println "**" + io.properties + "**"
return false;
} catch (XDocReportException xd) {
println "**" + xd.properties + "**"
return false;
} catch (Exception e) {
println "**" + e.properties + "**"
return false;
}
def String fileName = DataFormatUtil.formatFileName(invoiceExporterService.getOutputFilename(), "docx");
response.setContentType("application/octet-stream");
// response.setContentType(“application / vnd.openxmlformats-officedocument.wordprocessingml.document”); println fileName response.setHeader(“Content-Disposition”,“Attachment; Filename = $ {fileName}”); outputStream.flush();
现在的问题是,它不会将文件发送到客户端。它发送的东西不是我需要的文件。
我的问题是:
1)鉴于上面的代码,出了什么问题?这个bug的原因是什么? 2)什么是需要执行的触发器或代码行,以便将文件发送到客户端?
答案 0 :(得分:0)
奇怪的是,通过在此行之前设置内容类型和处置类型,我能够使代码工作:
def OutputStream outputStream = response.getOutputStream();
但问题仍然存在。什么是servletResponse将数据发送到客户端需要执行的触发器/代码行?