簡體   English   中英

在Java中將多個InputStreams寫入OutputStream?

[英]Writing multiple InputStreams to OutputStream in Java?

我有一個返回 pdf 發票的網絡服務。 客戶端代碼使用 HttpURLConnection 來使用服務。 它讀取 InputStream 中的發票,然后寫入 OutputStream。 所有這些都在起作用。 現在有要求select 多張發票並按下載按鈕。 它應該連接選定的發票並作為一個可瀏覽的文檔打開。

我嘗試使用如下所示的 SequenceInputStream,但它總是打開最后選擇的發票。 這是我的代碼

 for (int i=0; i < docIds.length; i++) {
        URL url = new URL(baseurl + "/invoices/" + docIds[i]);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", Application.get("documentum", "Authorization"));
        conn.setRequestProperty("Accept", "application/pdf");
        conn.setConnectTimeout(20000);
        conn.setReadTimeout(20000);
        conn.connect();
        if (!conn.getContentType().equalsIgnoreCase("application/pdf")) {
            System.out.println("FAILED.\n[Sorry. This is not a PDF.]");
            return false;
        } else {
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "filename=fbau-doc.pdf");
            outputStream = response.getOutputStream();
            InputStream in = conn.getInputStream();
            streams.add(in);

        }
  SequenceInputStream sequenceInputStream = new SequenceInputStream(streams.elements());
    // clean up
    IOUtils.copy(sequenceInputStream, outputStream);
    outputStream.close();

您不能只連接 PDF 文件,因為文件格式太復雜了。

  • 在一次操作中下載多個文件的最常見解決方案是將它們下載為 ZIP 文件。 這可以通過使用ZipOutputStream來“實時”完成,然后將各個 PDF 文件寫入 stream,一次一個。

    web 上有很多這樣的例子。

  • 如果您確實想要/需要將 PDF 文件合並/組合成一個新的多頁 PDF 文件,那么您需要找到一個可以幫助您的 PDF 庫。

我不會推薦第二種選擇。 最好將發票分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM