触发servletResponse的原因是它将数据/文件发送到客户端

时间:2016-05-05 02:50:37

标签: servlets grails

我正在开发一个创建报告的应用程序并将其发送给客户端。我使用了以下内容: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)什么是需要执行的触发器或代码行,以便将文件发送到客户端?

1 个答案:

答案 0 :(得分:0)

奇怪的是,通过在此行之前设置内容类型和处置类型,我能够使代码工作:

def OutputStream outputStream = response.getOutputStream();

但问题仍然存在。什么是servletResponse将数据发送到客户端需要执行的触发器/代码行?