当前位置: 首页 > 知识库问答 >
问题:

什么触发servletResponse向客户机发送数据/文件

华凯捷
2023-03-14

我正在开发一个应用程序,创建一个报告,并将其发送给客户端。我使用了以下代码: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");

1)给定上面的代码,哪里出了问题?bug的原因是什么?2)为了将文件发送到客户机,需要执行的触发器或代码行是什么?

共有1个答案

范侯林
2023-03-14

奇怪的是,我能够通过在这一行之前设置content-type和disposition type来使代码工作:

def OutputStream outputStream = response.getOutputStream();

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

 类似资料:
  • 使用worker来做服务器,没有用GatewayWorker,如何实现向指定用户推送消息? <?php use WorkermanWorker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 初始化一个worker容器,监听1234端口 $worker = new Worker('websocket://workerman.net:1

  • 使用shutdown()关闭套接字连接的写入方向后,所有随后接收的数据都会导致发送RST数据包,并且返回0的大小,表示读取方向的EOF。为什么会这样,即使阅读方向没有关闭? 我使用wireshark检查了发送的数据包: 发送[FIN,ACK]后,所有接收到的数据都用RST响应。即使发送了FIN(表示写入数据的结束)而不是RST(表示连接的结束),本地端似乎认为连接已完全关闭。远程端希望能够发送数据

  • 使用worker来做服务器,没有用GatewayWorker,如何实现向指定用户推送消息? <?php use WorkermanWorker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 初始化一个worker容器,监听1234端口 $worker = new Worker('websocket://workerman.net:1

  • 但是,下面的代码将数据发送到打印机,当数据到达打印机队列时,它返回时带有我认为可以通过指定风味来克服这个问题,但事实并非如此

  • 长连接服务(TCP、WebSocket)支持向客户端推送数据,具体用法https://doc.imiphp.com/utils/Server.html