2012-09-27 48 views
1

我想將具有pdf數據的OutputStream對象作爲文件發送到webbrowser。作爲文件下載的Spring OuputStream?

代碼如下。

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

} 

問題是我已經有outputstream,我不想將它轉換爲字節數組。

任何意見,將不勝感激。

回答

1

您不能:您只能將InputStream複製到OutputStream。然後,你可以使用:org.springframework.util.FileCopyUtils.copy(InputStream,OutputStream)

1

首先,我會說這是錯誤的說OutputStream有任何數據。一個流只是讓數據通過某個目的地。有時(SocketOutputStream)這個目標可能在一個完全不同的計算機上,有時(ByteArrayOutputStream)它將與流密切相關,甚至可以通過它獲得。但是這是一個特定流的細節,而不是你可以從任意一個指望的東西。

因此,不知道issue方法的結果究竟來自哪裏,很難提供解決方案,但通用的OutputStream不是它應該返回的。

猜測,該方法生成一些PDF數據,並通過一個OutputStream的地方寫它,然後返回流:

  • 如果創建一個File和流恰好是一個FileOutputStream,它應該返回的文件,文件路徑或FileInputStream代替相同的文件。
  • 如果它創建例如。一個ByteArrayOutputStream,那麼你已經有了一個字節數組,另外這個流類型有一個writeTo方法可以直接用來將數據寫入ServletOutputStream; issue只需將該流作爲正確的類型返回,而不會將其隱藏在通用接口之後。
  • 對於其他OutputStream類型,它取決於它們到底是什麼。