【问题标题】:How to read servlet response output stream in Node JS?如何在 Node JS 中读取 servlet 响应输出流?
【发布时间】:2017-04-14 18:30:46
【问题描述】:

用例是从服务器获取文件内容,使用node JS发送到浏览器。

详情:

在Java中读取文件(PDF、图像文件)(端点使用spring框架暴露)

@RequestMapping(value = "/getFileContent", method = RequestMethod.GET)
    public void getFileContent(HttpServletResponse response) throws IOException {
        try {
            File file = new File("src/main/resources/SampleDoc.pdf");
            InputStream targetStream = new FileInputStream(file);
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "inline; filename="+"sample.pdf");
            IOUtils.copy(targetStream, response.getOutputStream());
        } catch (Exception e) {
            LOG.error("Document Download Error", e.getMessage());
        }
    }

获取流并将其转换为pdf文件并在浏览器中显示:

    router.get('/openfile', function(req, res, next) {
      console.log("get call");
      request('http://localhost:8080/getFileContent', function (error, response, body) {
        if (!error && response.statusCode == 200) {
          var file= fs.createReadStream(response.body);              
          res.setHeader('Content-Type', 'application/pdf');
          res.setHeader('Content-Disposition', 'inline; filename=sample.pdf');
          file.pipe(res);    
}
      })
    });

上面的代码抛出一个错误说“路径必须是一个没有空字节的字符串”。

请推荐一个节点模块来接收来自java的servlet响应输出流并在浏览器中打开文件。

或建议可以从服务器发送的对象类型,以便我可以将其转换为节点中的图像/pdf 文件。

【问题讨论】:

    标签: javascript java node.js spring-mvc servlets


    【解决方案1】:

    您可以像下面这样通过管道返回响应流,

    router.get('/openfile', function(req, res, next) {
      req.pipe(request.get('http://localhost:8080/getFileContent')).pipe(res); });
    

    【讨论】:

    • 但我收到如下所示的错误 OutgoingMessage.prototype._send = function _send(data, encoding, callback) { ^ RangeError: Maximum call stack size exceeded
    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 2018-11-05
    • 2012-02-03
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多