応答本文で複数のファイルを一度に送信しようとしています。私の問題は、複数の配列リストを 1 つに連結できず、後で複数のファイルに分離し直すことができなかったことです。
これは私のコードです(動作していません):
List<PDDocument> documents = splitter.split(PDDocument.load(documentData));
ArrayList<byte[]> newDocuments = new ArrayList<>();
for (PDDocument doc : documents)
{
ByteArrayOutputStream os = new ByteArrayOutputStream();
doc.save(os);
newDocuments.add(os.toByteArray());
os.close();
}
t.sendResponseHeaders(200,newDocuments.toArray().length);;
OutputStream responseBody = t.getResponseBody();
responseBody.write(newDocuments.toArray());
responseBody.close();
だから私の質問は:
java 11 httpサーバーを使用して複数のファイルを単一のhttp応答に戻す方法は?
ありがとうございました !
アップデート :
Joni の助けを借りてコードを修正した後、別の問題に直面しています: 生成された Zip が破損しています:
これはコードです:
Splitter splitter = new Splitter();
List<PDDocument> documents = splitter.split(PDDocument.load(documentData));
t.sendResponseHeaders(200, 0);
t.getResponseHeaders().set("Content-Type", "application/zip");
OutputStream responseBody = t.getResponseBody();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
int counter = 1;
for (PDDocument doc : documents)
{
ZipEntry zipEntry = new ZipEntry("document" + counter);
zos.putNextEntry(zipEntry);
ByteArrayOutputStream docOs = new ByteArrayOutputStream();
doc.save(docOs);
docOs.close();
zos.write(docOs.toByteArray());
zos.closeEntry();
zos.finish();
zos.flush();
counter++;
}
zos.close();
baos.close();
responseBody.write(baos.toByteArray());
responseBody.flush();
responseBody.close();