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 楼答案
你不能只是连接PDF文件,因为文件格式太复杂了
在一次操作中下载多个文件的最常见解决方案是将它们作为ZIP文件下载。这可以通过使用
ZipOutputStream
“实时”完成,然后将单个PDF文件写入流,一次一个网上有很多这样的例子
如果你真的想/需要将PDF文件合并/组合成一个新的多页PDF文件,那么你需要找到一个PDF库来帮助你做到这一点
我不推荐第二种选择。最好把发票分开