1

PDFデータを持つOutputStreamオブジェクトをファイルとしてWebブラウザに送信したいと思います。

コードは次のとおりです。

@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 を介してどこかに書き込むと推測し、ストリームを返します。

  • を作成しFile、ストリームがたまたま 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 に答える