[英]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.