1

我想将具有 pdf 数据的 OutputStream 对象作为文件发送到网络浏览器。

代码如下。

@RequestMapping(value="/issue", method=RequestMethod.POST)
public void issue(HttpServletResponse response, TimeStampIssueParam param) throws JsonGenerationException, JsonMappingException, IOException {

    OutputStream pdfOuput = issue(input);
    response.setContentType("application/pdf");
    ServletOutputStream respOutput = response.getOutputStream();  
    ....

}

问题是我已经有了输出流,我不想将它转换为字节数组。

任何评论将不胜感激。

4

2 回答 2

1

首先,我想说说 OutputStream 有任何数据是错误的。流只是让数据通过某个目的地。有时(SocketOutputStream)这个目的地可能在完全不同的计算机上,有时(ByteArrayOutputStream)它会与流密切相关,甚至可以通过它获得。但这是特定流的细节,而不是您可以从任意流中指望的东西。

因此,不知道该方法的结果究竟issue来自哪里,很难提供解决方案,但通用的 OutputStream 不是它应该返回的。

猜测该方法会生成一些 PDF 数据并通过 OutputStream 将其写入某处,然后返回流:

  • 如果它创建 aFile并且流恰好是 FileOutputStream,它应该返回文件、文件路径或同一文件的 FileInputStream。
  • 如果它创建例如。一个ByteArrayOutputStream,那么你已经有了一个字节数组,另外这个流类型有一个writeTo方法可以直接用来将数据写入ServletOutputStream;issue只需将流作为正确的类型返回,而不是将其隐藏在通用接口后面。
  • 对于其他 OutputStream 类型,这取决于它们到底是什么。
于 2012-09-28T07:29:11.557 回答
1

您不能:您只能将 InputStream 复制到 OutputStream。然后,您可以使用: org.springframework.util.FileCopyUtils.copy(InputStream, OutputStream)

于 2012-09-27T12:38:51.657 回答