【问题标题】:Writing multiple InputStreams to OutputStream in Java?在Java中将多个InputStreams写入OutputStream?
【发布时间】:2021-05-26 00:52:32
【问题描述】:

我有一个返回 pdf 发票的网络服务。客户端代码使用 HttpURLConnection 来使用服务。它在 InputStream 中读取发票,然后写入 OutputStream。所有这些都在起作用。现在需要选择多张发票并按下下载按钮。它应该连接选定的发票并作为一个可浏览的文档打开。

我已尝试使用如下所示的 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();

【问题讨论】:

    标签: java web-services inputstream


    【解决方案1】:

    您不能只连接 PDF 文件,因为文件格式太复杂了。

    • 在一次操作中下载多个文件的最常见解决方案是将它们下载为 ZIP 文件。这可以通过使用ZipOutputStream“实时”完成,然后将单个 PDF 文件写入流,一次一个。

      网上有很多这样的例子。

    • 如果您确实想要/需要将 PDF 文件合并/组合成一个新的多页 PDF 文件,那么您需要找到可以帮助您执行此操作的 PDF 库。

    我不推荐第二种选择。最好将发票分开。

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2016-10-19
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多