Spring InputStream作为文件下载?

时间:2012-09-27 05:03:19

标签: java web-services spring

我想将具有pdf数据的OutputStream对象作为文件发送到webbrowser。

代码如下。

@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();  
    ....

}

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

任何评论都将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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