有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

web服务在Java中将多个InputStream写入OutputStream?

我有一个返回pdf发票的Web服务。客户端代码正在使用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();

共 (1) 个答案

  1. # 1 楼答案

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

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

      网上有很多这样的例子

    • 如果你真的想/需要将PDF文件合并/组合成一个新的多页PDF文件,那么你需要找到一个PDF库来帮助你做到这一点

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