2016-11-30 11 views
1

ユースケースは、サーバからファイルの内容を取得し、ノードJSを使用してブラウザに送信することです。ノード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);  
} 
     }) 
    }); 

上記のコードでは、「パスはnullバイトのない文字列でなければなりません」というエラーがスローされます。

javaからサーブレット応答出力ストリームを受け取り、ブラウザでファイルを開くノードモジュールを提案してください。

またはノードからimage/pdfファイルに変換できるようにサーバーから送信できるオブジェクトタイプを提案する。

答えて

2

パイプを使用し、応答は、以下のように戻ってストリーミングすることができ

router.get('/openfile', function(req, res, next) { 
    req.pipe(request.get('http://localhost:8080/getFileContent')).pipe(res); }); 
関連する問題